{"data":{"version":"v2.107","locale":"th","availableLocales":["en","vi","th","id","fil"],"updatedAt":"2026-11-13T08:53:59.804Z","contract":{"keywords":["if","else","for","while","def","class","return","global","pass","lambda","in","is","and","or","not","break","continue","True","False","None"],"allowedImports":["cognitab","random","math","time"],"builtinHelpers":["enumerate","zip","any","all","globals","len","int","float","str","type","isinstance","hasattr","print","bool","abs","sum","min","max","sorted","round","sqrt","pow","floor","ceil","sin","cos","tan","log","clamp"],"functionAliases":{"sleep":"wait"}},"guides":{"concurrency":{"title":"การทำงานพร้อมกันและการประมวลผล","sections":[{"id":"overview","title":"การทำงานพร้อมกันและการประมวลผล","body":"โฟลว์ทำงานทีละบรรทัดตามลำดับ “Blocking” คือบรรทัดถัดไปรอ ไม่ใช่แอปค้าง Flow.start() เปิดอีกโฟลว์ร่วมกัน ส่วน parallel=True เพียงจัดคิวสัมผัส","example":null},{"id":"flows","title":"โฟลว์เบื้องหลัง","body":"Flow.start() คืน Int บวกเมื่อโฟลว์ตามชื่อรับข้อความได้ มีโฟลว์เบื้องหลังพร้อมกันสูงสุดสองโฟลว์ send() คัดลอกข้อความตามลำดับ receive() รอ poll() ตรวจทันที การพักเก็บข้อความ การหยุดหรือจบทิ้งข้อความ running() รวมโฟลว์ที่พัก Flow.stop(name) หยุดโฟลว์เบื้องหลังเจ้าของ โฟลว์อื่นทำต่อและชื่อยังจองจนเก็บกวาดเสร็จ กลุ่มซ้อนตามชื่อใช้ข้อความและเป้าหมายหยุดของเจ้าของ โฟลว์หลักหยุดด้วยวิธีนี้ไม่ได้และไม่มีชื่ออัตโนมัติ มาโครรองานเบื้องหลัง จึงต้องหยุดงานที่ทำตลอดไปเอง Main Pause/Resume มีผลทุกโฟลว์ global Resume ล้างการพักรายโฟลว์ด้วย ตัวควบคุมเบื้องหลังมี Pause/Resume ไม่มี Stop การ start ผิดหรือชื่อซ้ำ ข้อผิดพลาดโฟลว์ Main Stop หรือ System.stop() หยุดทั้งมาโคร","example":"# ตั้งค่าโฟลว์มาโครชื่อ watch_enemy ก่อนเรียกใช้\nordinal = Flow.start(\"watch_enemy\", {\"task\": \"status\"})\nprint(ordinal)"},{"id":"shared-state","title":"สถานะร่วม","body":"แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์ Storage ป้องกันแต่ละการทำงานรวมการแก้ในชุดข้อมูล แต่โฟลว์อื่นอาจเขียนระหว่าง get() กับ set() ใช้โฟลว์เดียวเขียนเพื่อไม่ทับการอัปเดต การจับภาพ ใช้ภาพเดิม และตั้งค่าเสียงใช้ร่วมกัน แลกสำเนาข้อความผ่าน Flow.send(), receive() และ poll()","example":null},{"id":"touches","title":"การสัมผัสในคิว","body":"parallel=True จัดคิวสัมผัสโดยไม่รอเสร็จ แต่ delay_before, delay_after ยังรอนอก collect ใช้ Touch.collect() รวม Touch.send() ส่ง และ Touch.wait() รอ ท่าทางต่างโฟลว์อาจยกเลิกกันบนหน้าจอร่วม การยกเลิกท่าทางที่ทำอยู่ต้องใช้ Android 8 ขึ้นไป","example":"# รวบรวมการสัมผัสที่ซ้อนกันแล้วรอจนเสร็จ\nTouch.collect()\nclick((300, 900), hold_ms=1500, parallel=True)\nclick((780, 900), delay_before=500, parallel=True)\nTouch.send()\nTouch.wait()"},{"id":"recognition-ui","title":"การตรวจจับและการรอ UI","body":"Region.find* ค้นหาการปรากฏ ส่วน Region.wait* รอให้หายไป แม้ตรวจครั้งเดียวก็ใช้เวลา อัตราซ้ำคือ 1–60 ครั้ง/วินาที กล่อง MacroPanel แสดงทีละกล่องและรอ show(mode=\"floating\") ให้ทำต่อพร้อมแผงลอยหนึ่งแผงต่อรอบ ใช้ values() อ่านค่า close() ปิด OverlayText.off_all() ลบเฉพาะของโฟลว์นี้ การอัปเดตอาจต้องรอ","example":null}]}},"entries":[{"key":"class-audio","kind":"CLASS","parentKey":null,"name":"Audio","signature":"Audio(name)","description":"ค่าเสียงแบบอ่านอย่างเดียวสำหรับตรวจจับเสียงในแอปหรือเกม ใช้ Audio(name) เพื่อโหลดตัวอย่างที่บันทึกไว้ หรือ Audio.recent(duration_ms) เพื่อคัดลอกเสียงที่เพิ่งจับมา การจับและจับคู่เสียงทำบนอุปกรณ์ โดยไม่อัปโหลดบัฟเฟอร์การฟังต่อเนื่องและไม่ให้สคริปต์เข้าถึงข้อมูลเสียงดิบ (PCM)","behavior":"ค่าเสียงแบบอ่านอย่างเดียวสำหรับตรวจจับเสียงในแอปหรือเกม ใช้ Audio(name) เพื่อโหลดตัวอย่างที่บันทึกไว้ หรือ Audio.recent(duration_ms) เพื่อคัดลอกเสียงที่เพิ่งจับมา การจับและจับคู่เสียงทำบนอุปกรณ์ โดยไม่อัปโหลดบัฟเฟอร์การฟังต่อเนื่องและไม่ให้สคริปต์เข้าถึงข้อมูลเสียงดิบ (PCM)","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["name","duration_ms","start_ms","end_ms"],"fieldDocs":[{"name":"name","type":"String | None","defaultValue":null,"description":"ชื่อตัวอย่างที่บันทึกไว้ หรือ None สำหรับสแนปช็อตล่าสุด","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"duration_ms","type":"Number","defaultValue":null,"description":"ความยาวสแนปช็อตเป็นมิลลิวินาที","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"start_ms","type":"Number","defaultValue":null,"description":"เวลาเริ่มต้นเป็นมิลลิวินาที เป็นศูนย์สำหรับตัวอย่างที่มีชื่อ หรือนับจากเซสชันฟังสำหรับสแนปช็อตล่าสุด","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"end_ms","type":"Number","defaultValue":null,"description":"เวลาสิ้นสุดแบบไม่รวมปลายช่วง เป็นมิลลิวินาทีบนเส้นเวลาเดียวกับ start_ms","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"name","type":"String","defaultValue":null,"description":"ต้องระบุชื่อตัวอย่างที่สร้างในตัวจัดการเทมเพลตของมาโครนี้ ชื่อต้องไม่ว่างและไม่ใช่พาธไฟล์ โหลดตัวอย่างทันที รวมถึงตัวอย่างที่กู้คืนหรืออยู่ในแพ็กเกจที่ป้องกันด้วยการเข้ารหัส หากตัวอย่างหายหรือเสียหายจะรายงานข้อผิดพลาด Backup/Store บันทึกต้นทางที่เลือกและตัวอย่างพร้อมมาโคร รองรับ WAV แบบ PCM16 โมโน 48 kHz สูงสุด 32 ตัวอย่าง ตัวอย่างละไม่เกิน 10 วินาที และข้อมูล WAV รวมไม่เกิน 4 MiB","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"fieldExample":null,"constructorExample":"# โหลดตัวอย่างที่บันทึกในมาโครนี้\naudio = Audio(\"alert\")","params":[],"returnType":null,"returnDescription":null,"example":"# ตรวจจับตัวอย่างเสียงในเครื่องหลังเริ่มฟัง\nsample = Audio(\"alert\")\nAudio.start()\nwait(2000)\nclip = Audio.recent(duration_ms=2000)\nresult = clip.match(sample, threshold=0.85)\nif result.matched:\n    print(result.score, result.start_ms, result.end_ms)\nAudio.stop()","aliases":[],"group":null},{"key":"class-audio-static-method-start","kind":"STATIC_METHOD","parentKey":"class-audio","name":"start","signature":"Audio.start()","description":"เริ่มฟังเสียงจากแอปที่เลือก ไม่ใช้ไมโครโฟน ต้องใช้ Android 10 ขึ้นไป สิทธิ์บันทึกเสียง ความยินยอม MediaProjection และแอปต้นทางที่อนุญาตให้จับเสียง เรียกซ้ำขณะฟังจะรักษาบัฟเฟอร์เดิม การเริ่มใหม่หลัง stop จะรีเซ็ตเวลาของเซสชัน จึงต้องรีเซ็ตเวลาตรวจพบที่บันทึกไว้ด้วย Pause ล้างประวัติ แต่ Resume ยังคงนับเวลาจากจุดเริ่มต้นของเซสชันเดิมและรวมช่วงที่หยุดชั่วคราว หากขาดสิทธิ์ การตั้งค่า หรือเซสชันจับเสียง จะรายงานข้อผิดพลาด","behavior":"เริ่มฟังเสียงจากแอปที่เลือก ไม่ใช้ไมโครโฟน ต้องใช้ Android 10 ขึ้นไป สิทธิ์บันทึกเสียง ความยินยอม MediaProjection และแอปต้นทางที่อนุญาตให้จับเสียง เรียกซ้ำขณะฟังจะรักษาบัฟเฟอร์เดิม การเริ่มใหม่หลัง stop จะรีเซ็ตเวลาของเซสชัน จึงต้องรีเซ็ตเวลาตรวจพบที่บันทึกไว้ด้วย Pause ล้างประวัติ แต่ Resume ยังคงนับเวลาจากจุดเริ่มต้นของเซสชันเดิมและรวมช่วงที่หยุดชั่วคราว หากขาดสิทธิ์ การตั้งค่า หรือเซสชันจับเสียง จะรายงานข้อผิดพลาด","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":null,"example":"# เริ่มบันทึกเสียงจากแอปที่ตั้งค่าไว้หลังได้รับสิทธิ์และความยินยอม\nAudio.start()","aliases":[],"group":"FLOW"},{"key":"class-audio-static-method-stop","kind":"STATIC_METHOD","parentKey":"class-audio","name":"stop","signature":"Audio.stop()","description":"หยุดจับเสียงและล้างบัฟเฟอร์ ค่าเสียงที่คืนไปแล้วจะยังใช้ได้ และการจับภาพหน้าจอที่ส่วนอื่นใช้อยู่ยังทำงานต่อ เมื่อมาโครจบจะคืนทรัพยากรจับเสียงด้วย","behavior":"หยุดจับเสียงและล้างบัฟเฟอร์ ค่าเสียงที่คืนไปแล้วจะยังใช้ได้ และการจับภาพหน้าจอที่ส่วนอื่นใช้อยู่ยังทำงานต่อ เมื่อมาโครจบจะคืนทรัพยากรจับเสียงด้วย","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":null,"example":"# ปล่อยตัวบันทึกเสียงที่ตั้งค่าไว้\nAudio.stop()","aliases":[],"group":"FLOW"},{"key":"class-audio-static-method-recent","kind":"STATIC_METHOD","parentKey":"class-audio","name":"recent","signature":"Audio.recent(duration_ms)","description":"คัดลอกเสียงล่าสุดเป็นสแนปช็อตอิสระโดยไม่รอข้อมูลเพิ่ม เรียกได้เฉพาะ 10 วินาทีล่าสุด และไม่สามารถเรียกคืนเสียงที่เล่นก่อนเริ่มฟัง หากประวัติไม่พอหรือเครื่องบันทึกไม่พร้อมจะรายงานข้อผิดพลาด ความเงียบเพียงอย่างเดียวไม่ยืนยันว่าแอปต้นทางบล็อกการจับเสียง","behavior":"คัดลอกเสียงล่าสุดเป็นสแนปช็อตอิสระโดยไม่รอข้อมูลเพิ่ม เรียกได้เฉพาะ 10 วินาทีล่าสุด และไม่สามารถเรียกคืนเสียงที่เล่นก่อนเริ่มฟัง หากประวัติไม่พอหรือเครื่องบันทึกไม่พร้อมจะรายงานข้อผิดพลาด ความเงียบเพียงอย่างเดียวไม่ยืนยันว่าแอปต้นทางบล็อกการจับเสียง","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"duration_ms","type":"Number (1..10000)","defaultValue":null,"description":"ต้องระบุระยะเวลาเป็นจำนวนเต็มตั้งแต่ 1 ถึง 10000 มิลลิวินาที","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Audio","returnDescription":null,"example":"# แอปต้นทางต้องกำลังเล่น และต้องมีข้อมูลย้อนหลังอย่างน้อย 500 ms\nAudio.start()\nwait(600)\nclip = Audio.recent(500)\nprint(clip.duration_ms)","aliases":[],"group":"FLOW"},{"key":"class-audio-method-match","kind":"METHOD","parentKey":"class-audio","name":"match","signature":"audio.match(sample, threshold)","description":"ค้นหาช่วงที่คล้าย sample ที่สุดในเสียงนี้และคืนคะแนนความคล้าย ความเงียบไม่ถือว่าตรงกัน ส่วนเสียงที่ขาดทำให้คะแนนลดลง ตัวอย่างที่ยาวกว่าเสียงนี้ทำให้เกิดข้อผิดพลาด ไม่รู้จำคำพูดหรือปรับความเร็วและระดับเสียง เลือกเกณฑ์จากการบันทึกแยกกันและตรวจใหม่หลังอัปเดตตัวจับคู่","behavior":"ค้นหาช่วงที่คล้าย sample ที่สุดในเสียงนี้และคืนคะแนนความคล้าย ความเงียบไม่ถือว่าตรงกัน ส่วนเสียงที่ขาดทำให้คะแนนลดลง ตัวอย่างที่ยาวกว่าเสียงนี้ทำให้เกิดข้อผิดพลาด ไม่รู้จำคำพูดหรือปรับความเร็วและระดับเสียง เลือกเกณฑ์จากการบันทึกแยกกันและตรวจใหม่หลังอัปเดตตัวจับคู่","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"sample","type":"Audio","defaultValue":null,"description":"ค่าเสียงอ้างอิงที่ต้องการค้นหาภายในค่าเสียงนี้","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number (0..1)","defaultValue":null,"description":"ต้องระบุจำนวนจำกัดตั้งแต่ 0 ถึง 1 ปรับเกณฑ์ด้วยการบันทึกคนละครั้ง ค่า 0.85 เป็นเพียงตัวอย่าง ไม่ใช่เกณฑ์ที่แนะนำสำหรับทุกเสียง","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"AudioMatch","returnDescription":null,"example":"# บันทึกตัวอย่างเสียงเตือนใน Template Manager ก่อนเรียกใช้ตัวอย่างนี้\nsample = Audio(\"alert\")\nAudio.start()\nwait(1500)\nclip = Audio.recent(1500)\nresult = clip.match(sample, 0.85)\nprint(result)\nAudio.stop()","aliases":[],"group":"FLOW"},{"key":"class-audio-method-find","kind":"METHOD","parentKey":"class-audio","name":"find","signature":"audio.find(timeout_ms, threshold)","description":"รอตัวอย่างนี้ในเสียงใหม่ แล้วคืน AudioMatch ที่ผ่านเกณฑ์ หรือ None หากหมดช่วงบันทึกโดยไม่พบ ค้นหาเฉพาะเสียงที่รับหลังเริ่มคำสั่ง ไม่รับประกันการตรวจพบ\nเริ่มฟังหากจำเป็นโดยใช้เงื่อนไขเดียวกับ Audio.start() และฟังต่อจน Audio.stop() หรือแมโครจบ การประมวลผลอาจจบหลัง timeout_ms ค่า 0 คืน None โดยไม่เริ่มบันทึก\nPause แมโครทิ้งเสียงที่รอและหยุดเวลารอชั่วคราว Resume ค้นหาเสียงใหม่ การสูญเสียการบันทึก ข้อมูลล้น หรือเสียงเสียเป็นข้อผิดพลาด ไม่ใช่ None","behavior":"รอตัวอย่างนี้ในเสียงใหม่ แล้วคืน AudioMatch ที่ผ่านเกณฑ์ หรือ None หากหมดช่วงบันทึกโดยไม่พบ ค้นหาเฉพาะเสียงที่รับหลังเริ่มคำสั่ง ไม่รับประกันการตรวจพบ\nเริ่มฟังหากจำเป็นโดยใช้เงื่อนไขเดียวกับ Audio.start() และฟังต่อจน Audio.stop() หรือแมโครจบ การประมวลผลอาจจบหลัง timeout_ms ค่า 0 คืน None โดยไม่เริ่มบันทึก\nPause แมโครทิ้งเสียงที่รอและหยุดเวลารอชั่วคราว Resume ค้นหาเสียงใหม่ การสูญเสียการบันทึก ข้อมูลล้น หรือเสียงเสียเป็นข้อผิดพลาด ไม่ใช่ None","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"timeout_ms","type":"Number (0..2147483647)","defaultValue":null,"description":"ระยะเวลาจำนวนเต็มที่ต้องระบุ ตั้งแต่ 0 ถึง 2147483647 มิลลิวินาที ไม่นับเวลาพักแมโคร ช่วงบันทึกเป็นค่าประมาณ การประมวลผลอาจจบภายหลัง","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number (0..1)","defaultValue":null,"description":"ต้องระบุจำนวนจำกัดตั้งแต่ 0 ถึง 1 ปรับเกณฑ์ด้วยการบันทึกคนละครั้ง ค่า 0.85 เป็นเพียงตัวอย่าง ไม่ใช่เกณฑ์ที่แนะนำสำหรับทุกเสียง","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"AudioMatch | None","returnDescription":null,"example":"# รอเสียงใหม่และจัดการเมื่อหมดเวลา\naudio = Audio(\"alert\")\nresult = audio.find(timeout_ms=5000, threshold=0.85)\nif result is not None:\n    print(result.score, result.start_ms, result.end_ms)\nAudio.stop()","aliases":[],"group":"FLOW"},{"key":"class-audiomatch","kind":"READ_ONLY_CLASS","parentKey":null,"name":"AudioMatch","signature":"AudioMatch","description":"ผลการจับคู่เสียงแบบอ่านอย่างเดียว คะแนนคือความคล้าย ไม่ใช่ความน่าจะเป็นของความถูกต้อง เวลาใน find() ใช้เส้นเวลาของเซสชันฟัง ส่วน match() ใช้เส้นเวลาของค่าเสียงที่ค้นหา เปรียบเทียบเวลาเพื่อไม่จัดการเสียงเดียวซ้ำ ใช้เวลาเป็นเหตุการณ์ตรวจพบเฉพาะเมื่อ matched เป็น True","behavior":"ผลการจับคู่เสียงแบบอ่านอย่างเดียว คะแนนคือความคล้าย ไม่ใช่ความน่าจะเป็นของความถูกต้อง เวลาใน find() ใช้เส้นเวลาของเซสชันฟัง ส่วน match() ใช้เส้นเวลาของค่าเสียงที่ค้นหา เปรียบเทียบเวลาเพื่อไม่จัดการเสียงเดียวซ้ำ ใช้เวลาเป็นเหตุการณ์ตรวจพบเฉพาะเมื่อ matched เป็น True","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":false,"fields":["matched","score","start_ms","end_ms"],"fieldDocs":[{"name":"matched","type":"Boolean","defaultValue":null,"description":"เป็น True เมื่อช่วงเสียงที่ไม่เงียบผ่านเกณฑ์","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"score","type":"Number","defaultValue":null,"description":"ความคล้ายตั้งแต่ 0 ถึง 1 ไม่ใช่ความน่าจะเป็น","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"start_ms","type":"Number","defaultValue":null,"description":"เวลาเริ่มต้นของช่วงเสียงผู้สมัคร เป็นมิลลิวินาทีบนเส้นเวลาของเสียงที่ค้นหา","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"end_ms","type":"Number","defaultValue":null,"description":"เวลาสิ้นสุดแบบไม่รวมปลายช่วง เป็นมิลลิวินาทีบนเส้นเวลาเดียวกับ start_ms","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# บันทึกตัวอย่างเสียงเตือนใน Template Manager ก่อนเรียกใช้\nsample = Audio(\"alert\")\nAudio.start()\nwait(1500)\nclip = Audio.recent(1500)\nresult = clip.match(sample, 0.85)\nprint(result.matched, result.score, result.start_ms, result.end_ms)\nAudio.stop()","aliases":[],"group":null},{"key":"class-point","kind":"CLASS","parentKey":null,"name":"Point","signature":"Point(x, y, /, scale=\"fixed\", anchor=\"none\")","description":"ตำแหน่งบนหน้าจอในหน่วยพิกเซล ใช้สำหรับคลิก ปัด และทำเครื่องหมาย Scale และ anchor ปรับตำแหน่งตามขนาดหน้าจอ โดยจำกัดตำแหน่งสุดท้ายให้อยู่ในหน้าจอ อ่านพิกัดทั้งสองด้วย x, y = point","behavior":"ตำแหน่งบนหน้าจอในหน่วยพิกเซล ใช้สำหรับคลิก ปัด และทำเครื่องหมาย Scale และ anchor ปรับตำแหน่งตามขนาดหน้าจอ โดยจำกัดตำแหน่งสุดท้ายให้อยู่ในหน้าจอ อ่านพิกัดทั้งสองด้วย x, y = point","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["x","y","scale","anchor"],"fieldDocs":[{"name":"x","type":"Number","defaultValue":null,"description":"Horizontal coordinate in pixels.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"y","type":"Number","defaultValue":null,"description":"Vertical coordinate in pixels.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"scale","type":"String","defaultValue":"fixed","description":"การปรับพิกัดจากหน้าจอต้นฉบับของมาโคร: fixed คงพิกเซล; auto ปรับ X ตามอัตราส่วนความกว้างและ Y ตามความสูง; width หรือ height ปรับทั้งสองแกนตามมิตินั้น พิกัดที่ไม่ใช่ fixed หรือมี anchor จะปรับตามการหมุนหน้าจอและพื้นที่แอปของมาโครด้วย","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"anchor","type":"String","defaultValue":"none","description":"ตำแหน่งอ้างอิงสำหรับปรับพิกัด: none (มุมซ้ายบน), center, top, bottom, left, right, top_left, top_right, bottom_left, bottom_right ส่วน auto เลือกขอบหรือจุดกึ่งกลางที่ใกล้ที่สุด","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"x","type":"Number","defaultValue":null,"description":"X coordinate in pixels","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"y","type":"Number","defaultValue":null,"description":"Y coordinate in pixels","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"scale","type":"String","defaultValue":"fixed","description":"การปรับพิกัดจากหน้าจอต้นฉบับของมาโคร: fixed คงพิกเซล; auto ปรับ X ตามอัตราส่วนความกว้างและ Y ตามความสูง; width หรือ height ปรับทั้งสองแกนตามมิตินั้น พิกัดที่ไม่ใช่ fixed หรือมี anchor จะปรับตามการหมุนหน้าจอและพื้นที่แอปของมาโครด้วย","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"anchor","type":"String","defaultValue":"none","description":"ตำแหน่งอ้างอิงสำหรับปรับพิกัด: none (มุมซ้ายบน), center, top, bottom, left, right, top_left, top_right, bottom_left, bottom_right ส่วน auto เลือกขอบหรือจุดกึ่งกลางที่ใกล้ที่สุด","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"fieldExample":"# อ่านค่า x, y ของ Point\np = Point(500, 900)\nx_value = p.x #500\ny_value = p.y #900\nscale_value = p.scale #FIXED_PIXEL\n\n# แยก Point เป็นพิกัด x, y\nx, y = p","constructorExample":"# สร้าง Point ที่มี scale/anchor แล้วแตะตำแหน่งนั้น\np = Point(500, 900, scale=\"width\", anchor=\"center\")\nclick(p)","params":[],"returnType":null,"returnDescription":null,"example":"origin = Point(0, 0)\ntarget = Point(500, 900)\nswipe([\n    SwipePoint(origin, speed=\"NORMAL\"),\n    SwipePoint(target)\n])","aliases":[],"group":null},{"key":"class-point-method-distance-to","kind":"METHOD","parentKey":"class-point","name":"distance_to","signature":"point.distance_to(other)","description":"คืนระยะทางแบบยูคลิดระหว่างพิกัดจำกัดที่เก็บไว้ของ Point สองจุด ใช้ระบบพิกัดเดียวกัน โดยไม่ปรับขนาดหรือตัดตามหน้าจอ","behavior":"คืนระยะทางแบบยูคลิดระหว่างพิกัดจำกัดที่เก็บไว้ของ Point สองจุด ใช้ระบบพิกัดเดียวกัน โดยไม่ปรับขนาดหรือตัดตามหน้าจอ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"Point","defaultValue":null,"description":"จุดอีกจุดหนึ่ง","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Number","returnDescription":"ระยะทางที่เป็นจำนวนจำกัด พิกัดหรือระยะทางที่ไม่จำกัดทำให้เกิดข้อผิดพลาด","example":"# วัดระยะระหว่างสองจุด\nprint(Point(0, 0).distance_to(Point(3, 4)))","aliases":[],"group":"FLOW"},{"key":"class-point-method-offset","kind":"METHOD","parentKey":"class-point","name":"offset","signature":"point.offset(dx, dy, scale=None)","description":"คืน Point ใหม่ที่เลื่อนตาม dx และ dy หลังปรับจุดนี้ให้เข้ากับหน้าจอปัจจุบัน ปรับระยะเลื่อนตามขนาดเต็มหน้าจอ โดย X ยังคงเป็นแนวนอนและ Y เป็นแนวตั้ง Point เดิมไม่เปลี่ยน","behavior":"คืน Point ใหม่ที่เลื่อนตาม dx และ dy หลังปรับจุดนี้ให้เข้ากับหน้าจอปัจจุบัน ปรับระยะเลื่อนตามขนาดเต็มหน้าจอ โดย X ยังคงเป็นแนวนอนและ Y เป็นแนวตั้ง Point เดิมไม่เปลี่ยน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"dx","type":"Int","defaultValue":null,"description":"ระยะเลื่อนแนวนอนเป็นจำนวนเต็มพิกเซล: บวกไปขวา ลบไปซ้าย ไม่รับเศษส่วน","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"dy","type":"Int","defaultValue":null,"description":"ระยะเลื่อนแนวตั้งเป็นจำนวนเต็มพิกเซล: บวกลงล่าง ลบขึ้นบน ไม่รับเศษส่วน","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"scale","type":"String?","defaultValue":"None","description":"Offset scale mode using full-screen dimensions. Defaults to this Point's current scale. Values: fixed, auto, width, height.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Point","returnDescription":"Point ใหม่ภายในหน้าจอปัจจุบัน โดย scale เป็น FIXED_PIXEL และ anchor เป็น NONE","example":"# สเกลค่าเลื่อนพิกเซลตามความกว้างเต็มหน้าจอ แล้วบวกเข้ากับ Point\ntarget = Point(500, 900, scale=\"width\", anchor=\"center\").offset(120, -80)\nprint(target)\ntarget.highlight()","aliases":[],"group":"FLOW"},{"key":"class-point-method-highlight","kind":"METHOD","parentKey":"class-point","name":"highlight","signature":"point.highlight(color=\"green\", line_width=2, region_width=36, auto_hide_ms=0)","description":"ทำเครื่องหมายจุดนี้ด้วยกรอบสี่เหลี่ยมจัตุรัส การเรียกซ้ำบน Point เดิมจะแทนที่กรอบเดิม เมธอดคืนค่าก่อนวาดเสร็จ และแสดงเฉพาะการอัปเดตล่าสุดก่อนรีเฟรชหน้าจอครั้งถัดไป","behavior":"ทำเครื่องหมายจุดนี้ด้วยกรอบสี่เหลี่ยมจัตุรัส การเรียกซ้ำบน Point เดิมจะแทนที่กรอบเดิม เมธอดคืนค่าก่อนวาดเสร็จ และแสดงเฉพาะการอัปเดตล่าสุดก่อนรีเฟรชหน้าจอครั้งถัดไป","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"color","type":"Color | String | Number","defaultValue":"green","description":"Highlight color.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"line_width","type":"Number","defaultValue":"2","description":"ความหนากรอบเป็น dp; ค่าต่ำกว่า 1 จะเป็น 1","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"region_width","type":"Number","defaultValue":"36","description":"ความกว้างและสูงของสี่เหลี่ยมจัตุรัสเป็นพิกเซล; ค่าต่ำกว่า 1 จะเป็น 1","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"auto_hide_ms","type":"Number","defaultValue":"0","description":"Auto-hide after N milliseconds. 0 disables auto-hide.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"พื้นที่สี่เหลี่ยมจัตุรัสที่ไฮไลต์อยู่ตรงกลางรอบจุด","example":"p = Point(500, 900)\np.highlight()","aliases":[],"group":"FLOW"},{"key":"class-point-method-highlight-off","kind":"METHOD","parentKey":"class-point","name":"highlight_off","signature":"point.highlight_off()","description":"ลบกรอบที่ Point นี้สร้าง","behavior":"ลบกรอบที่ Point นี้สร้าง","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Point","returnDescription":"ส่งคืนจุดเดิมหลังจากปิดไฮไลต์","example":"p = Point(500, 900)\np.highlight(\"red\", 3)\nwait(1000)\np.highlight_off()","aliases":[],"group":"FLOW"},{"key":"class-swipepoint","kind":"CLASS","parentKey":null,"name":"SwipePoint","signature":"SwipePoint(point, speed=\"NORMAL\", delay_before=0, random=10, humanized=False, scale=\"fixed\", anchor=\"none\")","description":"ตำแหน่งและการตั้งค่าการเคลื่อนที่สำหรับหนึ่งขั้นของการปัด ส่งรายการ SwipePoint อย่างน้อยสองรายการให้ swipe([...]) เพื่อเลื่อนนิ้วหนึ่งนิ้วผ่านตำแหน่งเหล่านั้น","behavior":"ตำแหน่งและการตั้งค่าการเคลื่อนที่สำหรับหนึ่งขั้นของการปัด ส่งรายการ SwipePoint อย่างน้อยสองรายการให้ swipe([...]) เพื่อเลื่อนนิ้วหนึ่งนิ้วผ่านตำแหน่งเหล่านั้น","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["point","speed","delay_before","random","humanized","scale","anchor"],"fieldDocs":[{"name":"point","type":"Point","defaultValue":null,"description":"ตำแหน่งปัดเป็นพิกเซล พร้อมการตั้งค่า scale และ anchor","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"speed","type":"String","defaultValue":"NORMAL","description":"ความเร็วจากจุดนี้ไปจุดถัดไป: VERY_SLOW, SLOW, NORMAL, FAST, VERY_FAST","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"delay_before","type":"Number","defaultValue":"0","description":"เวลารอเป็นมิลลิวินาที; ค่าลบจะเป็น 0 เมื่อ parallel=False จะรอก่อนเริ่มที่จุดแรกหรือหลังถึงจุดถัดไป การปัดแบบขนานใช้เฉพาะเวลารอของจุดแรก","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"random","type":"Number","defaultValue":"10","description":"ระยะสุ่มเลื่อนสูงสุดเป็นพิกเซลในแต่ละแกน; 0 ใช้ตำแหน่งตรง ค่าลบจะเป็น 0","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"humanized","type":"Boolean","defaultValue":"False","description":"ใช้เส้นทางโค้งทั้งการปัด หากมี SwipePoint ใดตั้ง humanized=True","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"scale","type":"String","defaultValue":"fixed","description":"วิธีปรับขนาดพิกัดเหมือน Point: fixed, auto, width, height หากไม่ระบุจะใช้ค่าจาก point","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"anchor","type":"String","defaultValue":"none","description":"ตำแหน่งอ้างอิงเหมือน Point หากไม่ระบุจะใช้ค่าจาก point; tuple เริ่มด้วย none","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"point","type":"Point | tuple[Number, Number]","defaultValue":null,"description":"Point หรือ tuple (x, y) เป็นพิกเซล คง scale และ anchor ของ Point เว้นแต่ระบุค่าใหม่ที่นี่","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"speed","type":"String","defaultValue":"NORMAL","description":"ความเร็วจากจุดนี้ไปจุดถัดไป: VERY_SLOW, SLOW, NORMAL, FAST, VERY_FAST","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"delay_before","type":"Number","defaultValue":"0","description":"เวลารอเป็นมิลลิวินาที; ค่าลบจะเป็น 0 เมื่อ parallel=False จะรอก่อนเริ่มที่จุดแรกหรือหลังถึงจุดถัดไป การปัดแบบขนานใช้เฉพาะเวลารอของจุดแรก","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"random","type":"Number","defaultValue":"10","description":"ระยะสุ่มเลื่อนสูงสุดเป็นพิกเซลในแต่ละแกน; 0 ใช้ตำแหน่งตรง ค่าลบจะเป็น 0","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"humanized","type":"Boolean","defaultValue":"False","description":"ใช้เส้นทางโค้งทั้งการปัด หากมี SwipePoint ใดตั้ง humanized=True","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"scale","type":"String","defaultValue":"fixed","description":"วิธีปรับขนาดพิกัดเหมือน Point: fixed, auto, width, height หากไม่ระบุจะใช้ค่าจาก point","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"anchor","type":"String","defaultValue":"none","description":"ตำแหน่งอ้างอิงเหมือน Point หากไม่ระบุจะใช้ค่าจาก point; tuple เริ่มด้วย none","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"fieldExample":null,"constructorExample":"path = [\n    SwipePoint(Point(500, 1500), speed=\"FAST\"),\n    SwipePoint((560, 980), speed=\"NORMAL\", humanized=True),\n    SwipePoint(Point(500, 500))\n]\nswipe(path)","params":[],"returnType":null,"returnDescription":null,"example":"# สองนิ้วทำงานพร้อมกัน โดยแต่ละนิ้วเป็น path แบบแบนหนึ่งเส้น\nTouch.collect()\nleft = swipe([\n    SwipePoint(Point(300, 1500), speed=\"FAST\"),\n    SwipePoint(Point(300, 500))\n], parallel=True)\nright = swipe([\n    SwipePoint(Point(780, 1500), speed=\"FAST\"),\n    SwipePoint(Point(780, 500))\n], parallel=True)\nTouch.send()\nTouch.wait()","aliases":[],"group":null},{"key":"class-touch","kind":"CLASS","parentKey":null,"name":"Touch","signature":"Touch","description":"จัดการการคลิกและปัดแบบขนานจากสคริปต์หรือแอ็กชันของมาโคร: จัดกลุ่ม ดูความคืบหน้า รอ หรือยกเลิก ในสคริปต์ใช้ click(..., parallel=True) หรือ swipe(..., parallel=True) ต้องเปิดบริการการช่วยเหลือพิเศษของ CogniTab เพื่อส่งท่าทาง","behavior":"จัดการการคลิกและปัดแบบขนานจากสคริปต์หรือแอ็กชันของมาโคร: จัดกลุ่ม ดูความคืบหน้า รอ หรือยกเลิก ในสคริปต์ใช้ click(..., parallel=True) หรือ swipe(..., parallel=True) ต้องเปิดบริการการช่วยเหลือพิเศษของ CogniTab เพื่อส่งท่าทาง","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"parallel=True จัดคิวสัมผัส แต่ delay_before, delay_after ยังรอนอก collect ใช้ Touch.collect() รวม send() ส่ง และ wait() รอจนเสร็จ การสัมผัสจากต่างโฟลว์อาจรบกวนกัน"},"limitations":[],"relatedApis":["class-touch-static-method-collect","class-touch-static-method-send","class-touch-static-method-wait"],"isCallable":false,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"Touch.collect()\na = click(Point(300, 900), hold_ms=5000, parallel=True)\nb = click(Point(780, 900), hold_ms=1000, delay_before=1000, parallel=True)\nsent = Touch.send()\nTouch.cancel(a)\nTouch.wait()","aliases":[],"group":null},{"key":"class-touch-static-method-collect","kind":"STATIC_METHOD","parentKey":"class-touch","name":"collect","signature":"Touch.collect()","description":"เก็บคำสั่งคลิก/ปัดถัดไปในสคริปต์ที่ใช้ parallel=True จนเรียก Touch.send() เพื่อให้ทำงานร่วมกัน คำสั่งอื่นไม่เปลี่ยน หากไม่เก็บ คำสั่งขนานจะส่งทันที ต้องเรียก Touch.send() ก่อนสคริปต์จบ มิฉะนั้นท่าทางที่ยังไม่ส่งจะทำให้เกิดข้อผิดพลาด","behavior":"เก็บคำสั่งคลิก/ปัดถัดไปในสคริปต์ที่ใช้ parallel=True จนเรียก Touch.send() เพื่อให้ทำงานร่วมกัน คำสั่งอื่นไม่เปลี่ยน หากไม่เก็บ คำสั่งขนานจะส่งทันที ต้องเรียก Touch.send() ก่อนสคริปต์จบ มิฉะนั้นท่าทางที่ยังไม่ส่งจะทำให้เกิดข้อผิดพลาด","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"คืนค่าก่อนท่าทางเสร็จ การสัมผัสที่รวมไว้ทำงานหลัง Touch.send() เท่านั้น สถานะเป็นของขณะตรวจและอาจเปลี่ยนทันที"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":null,"example":"# ตรวจสอบหรือควบคุมการสัมผัสที่รวบรวมไว้\nTouch.collect()\nfirst = click((300, 900), hold_ms=1000, parallel=True)\nsecond = click((780, 900), delay_before=300, parallel=True)\nTouch.send()\nTouch.wait()","aliases":[],"group":"FLOW"},{"key":"class-touch-static-method-send","kind":"STATIC_METHOD","parentKey":"class-touch","name":"send","signature":"Touch.send()","description":"ส่งท่าทางที่เก็บไว้พร้อมกันแล้วหยุดโหมดเก็บ คืน ID ตัวเลขตามลำดับที่เก็บ หรือรายการว่างหากไม่มี เกิน 10 ท่าทางจะเกิดข้อผิดพลาด การส่งไม่รอให้ทำงานเสร็จ ใช้ Touch.wait() เพื่อรอ","behavior":"ส่งท่าทางที่เก็บไว้พร้อมกันแล้วหยุดโหมดเก็บ คืน ID ตัวเลขตามลำดับที่เก็บ หรือรายการว่างหากไม่มี เกิน 10 ท่าทางจะเกิดข้อผิดพลาด การส่งไม่รอให้ทำงานเสร็จ ใช้ Touch.wait() เพื่อรอ","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"คืนค่าก่อนท่าทางเสร็จ การสัมผัสที่รวมไว้ทำงานหลัง Touch.send() เท่านั้น สถานะเป็นของขณะตรวจและอาจเปลี่ยนทันที"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list[Number]","returnDescription":null,"example":"# ตรวจสอบหรือควบคุมการสัมผัสที่รวบรวมไว้\nTouch.collect()\nfirst = click((300, 900), hold_ms=1000, parallel=True)\nsecond = click((780, 900), delay_before=300, parallel=True)\nTouch.send()\nTouch.wait()","aliases":[],"group":"FLOW"},{"key":"class-touch-static-method-queued","kind":"STATIC_METHOD","parentKey":"class-touch","name":"queued","signature":"Touch.queued()","description":"คืนสถานะของท่าทางที่ส่งแล้วและกำลังรอเริ่ม ท่าทางที่ Touch.collect() เก็บไว้จะยังไม่รวมจนเรียก Touch.send()","behavior":"คืนสถานะของท่าทางที่ส่งแล้วและกำลังรอเริ่ม ท่าทางที่ Touch.collect() เก็บไว้จะยังไม่รวมจนเรียก Touch.send()","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"คืนค่าก่อนท่าทางเสร็จ การสัมผัสที่รวมไว้ทำงานหลัง Touch.send() เท่านั้น สถานะเป็นของขณะตรวจและอาจเปลี่ยนทันที"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list[TouchState]","returnDescription":null,"example":"# ตรวจสอบหรือควบคุมการสัมผัสที่รวบรวมไว้\nTouch.collect()\nfirst = click((300, 900), hold_ms=1000, parallel=True)\nsecond = click((780, 900), delay_before=300, parallel=True)\nTouch.send()\nprint(Touch.queued())\nTouch.wait()","aliases":[],"group":"FLOW"},{"key":"class-touch-static-method-active","kind":"STATIC_METHOD","parentKey":"class-touch","name":"active","signature":"Touch.active()","description":"คืนสถานะของท่าทางที่กำลังทำงาน","behavior":"คืนสถานะของท่าทางที่กำลังทำงาน","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"คืนค่าก่อนท่าทางเสร็จ การสัมผัสที่รวมไว้ทำงานหลัง Touch.send() เท่านั้น สถานะเป็นของขณะตรวจและอาจเปลี่ยนทันที"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list[TouchState]","returnDescription":null,"example":"# ตรวจสอบหรือควบคุมการสัมผัสที่รวบรวมไว้\nTouch.collect()\nfirst = click((300, 900), hold_ms=1000, parallel=True)\nsecond = click((780, 900), delay_before=300, parallel=True)\nTouch.send()\nprint(Touch.active())\nTouch.wait()","aliases":[],"group":"FLOW"},{"key":"class-touch-static-method-all","kind":"STATIC_METHOD","parentKey":"class-touch","name":"all","signature":"Touch.all()","description":"คืนสถานะท่าทางที่รอหรือกำลังทำงาน พร้อมสถานะที่เพิ่งจบสูงสุด 64 รายการ ไม่รวมท่าทางที่ยังไม่ได้ส่งด้วย Touch.send()","behavior":"คืนสถานะท่าทางที่รอหรือกำลังทำงาน พร้อมสถานะที่เพิ่งจบสูงสุด 64 รายการ ไม่รวมท่าทางที่ยังไม่ได้ส่งด้วย Touch.send()","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"คืนค่าก่อนท่าทางเสร็จ การสัมผัสที่รวมไว้ทำงานหลัง Touch.send() เท่านั้น สถานะเป็นของขณะตรวจและอาจเปลี่ยนทันที"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list[TouchState]","returnDescription":null,"example":"# ตรวจสอบหรือควบคุมการสัมผัสที่รวบรวมไว้\nTouch.collect()\nfirst = click((300, 900), hold_ms=1000, parallel=True)\nsecond = click((780, 900), delay_before=300, parallel=True)\nTouch.send()\nprint(Touch.all())\nTouch.wait()","aliases":[],"group":"FLOW"},{"key":"class-touch-static-method-wait","kind":"STATIC_METHOD","parentKey":"class-touch","name":"wait","signature":"Touch.wait(id=None)","description":"รอท่าทางที่ส่งแล้วตาม ID ตัวเลขนี้และคืน TouchState หรือ None หากไม่รู้จัก ID หรือไม่ได้เก็บไว้แล้ว เมื่อ id=None จะรอทุกท่าทางที่รอหรือกำลังทำงาน แล้วคืนสถานะที่ยังเก็บไว้ รวมรายการที่เพิ่งจบ ต้องส่งท่าทางที่เก็บไว้ก่อน","behavior":"รอท่าทางที่ส่งแล้วตาม ID ตัวเลขนี้และคืน TouchState หรือ None หากไม่รู้จัก ID หรือไม่ได้เก็บไว้แล้ว เมื่อ id=None จะรอทุกท่าทางที่รอหรือกำลังทำงาน แล้วคืนสถานะที่ยังเก็บไว้ รวมรายการที่เพิ่งจบ ต้องส่งท่าทางที่เก็บไว้ก่อน","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"รอครบเวลาหรือสัมผัสเสร็จ โฟลว์อื่นทำต่อได้ การพักและหยุดยังมีผล"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"TouchState | list[TouchState] | None","returnDescription":null,"example":"# ตรวจสอบหรือควบคุมการสัมผัสที่รวบรวมไว้\nTouch.collect()\nfirst = click((300, 900), hold_ms=1000, parallel=True)\nsecond = click((780, 900), delay_before=300, parallel=True)\nTouch.send()\nTouch.wait(first)\nTouch.wait()","aliases":[],"group":"FLOW"},{"key":"class-touch-static-method-cancel","kind":"STATIC_METHOD","parentKey":"class-touch","name":"cancel","signature":"Touch.cancel(id=None)","description":"ยกเลิกท่าทางที่ส่งแล้วซึ่งรอหรือกำลังทำงานตาม ID ตัวเลข คืน True หากรับคำสั่ง มิฉะนั้น False เมื่อ id=None จะยกเลิกทั้งหมดและคืนจำนวนที่รับคำสั่ง การยกเลิกท่าทางที่กำลังทำงานต้องใช้ Android 8.0+ และเกิดข้อผิดพลาดบน Android 7.x ไม่ยกเลิกท่าทางที่ Touch.collect() ยังเก็บไว้","behavior":"ยกเลิกท่าทางที่ส่งแล้วซึ่งรอหรือกำลังทำงานตาม ID ตัวเลข คืน True หากรับคำสั่ง มิฉะนั้น False เมื่อ id=None จะยกเลิกทั้งหมดและคืนจำนวนที่รับคำสั่ง การยกเลิกท่าทางที่กำลังทำงานต้องใช้ Android 8.0+ และเกิดข้อผิดพลาดบน Android 7.x ไม่ยกเลิกท่าทางที่ Touch.collect() ยังเก็บไว้","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"parallel=True จัดคิวสัมผัส แต่ delay_before, delay_after ยังรอนอก collect ใช้ Touch.collect() รวม send() ส่ง และ wait() รอจนเสร็จ การสัมผัสจากต่างโฟลว์อาจรบกวนกัน"},"limitations":[],"relatedApis":["class-touch-static-method-collect","class-touch-static-method-send","class-touch-static-method-wait"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean | Int","returnDescription":null,"example":"# ตรวจสอบหรือควบคุมการสัมผัสที่รวบรวมไว้\nTouch.collect()\nfirst = click((300, 900), hold_ms=1000, parallel=True)\nsecond = click((780, 900), delay_before=300, parallel=True)\nTouch.send()\n# การยกเลิกการทำงานที่กำลังดำเนินอยู่ต้องใช้ Android 8 ขึ้นไป\nTouch.cancel(second)\nTouch.wait()","aliases":[],"group":"FLOW"},{"key":"class-touchstate","kind":"READ_ONLY_CLASS","parentKey":null,"name":"TouchState","signature":"TouchState(id, status, kind, action_order, remaining_repeats, completed_repeats)","description":"สถานะของการคลิกหรือปัดแบบขนาน ณ เวลาที่สอบถาม รับผ่านเมธอดของ Touch และจะไม่อัปเดตเอง","behavior":"สถานะของการคลิกหรือปัดแบบขนาน ณ เวลาที่สอบถาม รับผ่านเมธอดของ Touch และจะไม่อัปเดตเอง","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":false,"fields":["id","status","kind","action_order","remaining_repeats","completed_repeats"],"fieldDocs":[{"name":"id","type":"Number","defaultValue":null,"description":"Touch submission id.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"status","type":"String","defaultValue":null,"description":"queued: รอ; active: กำลังทำงาน; completed: สำเร็จแล้ว; cancelled: ยกเลิกแล้ว; failed: ทำไม่สำเร็จ","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"kind","type":"String","defaultValue":null,"description":"Touch kind such as click or swipe.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"action_order","type":"Number","defaultValue":null,"description":"ลำดับของแอ็กชันในมาโครที่ส่งท่าทางนี้","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"remaining_repeats","type":"Number","defaultValue":"0","description":"จำนวนครั้งที่ยังทำไม่เสร็จ","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"completed_repeats","type":"Number","defaultValue":"0","description":"จำนวนครั้งที่ทำเสร็จแล้ว","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# ค่า TouchState มาจากการสอบถามสถานะการสัมผัส อย่าสร้างค่าเหล่านี้เอง\nTouch.collect()\nclick((300, 900), hold_ms=1000, parallel=True)\nTouch.send()\nfor state in Touch.all():\n    print(state.id, state.status, state.kind)\nTouch.wait()","aliases":[],"group":null},{"key":"class-scaleparam","kind":"CLASS","parentKey":null,"name":"ScaleParam","signature":"ScaleParam(grayscale=True, auto_scale=False, cache_scale=True, template_scale=\"SHORT_EDGE\", fast_matching=False)","description":"การตั้งค่าสำหรับค้นหาภาพแม่แบบภายใน Region ส่งออบเจ็กต์นี้เป็น scale_param ของ Region การตั้งค่าเหล่านี้ไม่เปลี่ยนพิกัดของพื้นที่","behavior":"การตั้งค่าสำหรับค้นหาภาพแม่แบบภายใน Region ส่งออบเจ็กต์นี้เป็น scale_param ของ Region การตั้งค่าเหล่านี้ไม่เปลี่ยนพิกัดของพื้นที่","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["grayscale","auto_scale","cache_scale","template_scale","fast_matching"],"fieldDocs":[{"name":"grayscale","type":"Boolean","defaultValue":"True","description":"**Applies to templates**. Convert screenshot/template to grayscale before template matching.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"auto_scale","type":"Boolean","defaultValue":"False","description":"ลองขนาดแม่แบบใกล้เคียงหลังใช้ template_scale ช่วงปรับตามขนาด/ความหนาแน่นหน้าจอ และอาจขยายจาก 0.70x ถึง 1.30x ไม่มีผลเมื่อ template_scale=\"NONE\"","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"cache_scale","type":"Boolean","defaultValue":"True","description":"จดจำขนาด auto_scale ที่ค้นหาสำเร็จเพื่อใช้ครั้งถัดไปด้วยการตั้งค่าเดิม ใช้เฉพาะเมื่อ auto_scale=True","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"template_scale","type":"String","defaultValue":"SHORT_EDGE","description":"วิธีปรับขนาดแม่แบบให้เข้ากับอุปกรณ์: SHORT_EDGE ใช้ขอบหน้าจอด้านสั้น; LONG_EDGE ด้านยาว; DPI ความหนาแน่นพิกเซล; SMALLEST_WIDTH_DP ด้านสั้นเป็น dp ส่วน NONE คงขนาดภาพ","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"fast_matching","type":"Boolean","defaultValue":"False","description":"ลดขนาดทั้งภาพ Region และเทมเพลตลงเหลือสองในสามก่อนจับคู่ วิธีนี้เร็วขึ้นแต่อาจลดความแม่นยำเล็กน้อย โดยเฉพาะไอคอนขนาดเล็ก","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"grayscale","type":"Boolean","defaultValue":"True","description":"**Applies to templates**. Convert template matching to grayscale.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"auto_scale","type":"Boolean","defaultValue":"False","description":"ลองขนาดแม่แบบใกล้เคียงหลังใช้ template_scale ช่วงปรับตามขนาด/ความหนาแน่นหน้าจอ และอาจขยายจาก 0.70x ถึง 1.30x ไม่มีผลเมื่อ template_scale=\"NONE\"","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"cache_scale","type":"Boolean","defaultValue":"True","description":"จดจำขนาด auto_scale ที่ค้นหาสำเร็จเพื่อใช้ครั้งถัดไปด้วยการตั้งค่าเดิม ใช้เฉพาะเมื่อ auto_scale=True","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"template_scale","type":"String","defaultValue":"SHORT_EDGE","description":"วิธีปรับขนาดแม่แบบให้เข้ากับอุปกรณ์: SHORT_EDGE ใช้ขอบหน้าจอด้านสั้น; LONG_EDGE ด้านยาว; DPI ความหนาแน่นพิกเซล; SMALLEST_WIDTH_DP ด้านสั้นเป็น dp ส่วน NONE คงขนาดภาพ","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"fast_matching","type":"Boolean","defaultValue":"False","description":"ลดขนาดทั้งภาพ Region และเทมเพลตลงเหลือสองในสามก่อนจับคู่ วิธีนี้เร็วขึ้นแต่อาจลดความแม่นยำเล็กน้อย โดยเฉพาะไอคอนขนาดเล็ก","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"fieldExample":"param = ScaleParam(auto_scale=True, template_scale=\"LONG_EDGE\", fast_matching=True)\nparam.cache_scale = False\ntemplate_mode = param.template_scale","constructorExample":"param = ScaleParam(grayscale=True, auto_scale=True, cache_scale=True, template_scale=\"LONG_EDGE\", fast_matching=True)\nquick = ScaleParam(False, True, True, \"LONG_EDGE\", True)","params":[],"returnType":null,"returnDescription":null,"example":"# ตั้งค่าการเตรียมภาพสำหรับการจับคู่บน Region นี้\nsettings = ScaleParam(grayscale=True, fast_matching=True)\nregion = Region(100, 200, 300, 400, scale_param=settings)\nprint(region.find(\"start\", timeout=0).found)","aliases":[],"group":null},{"key":"class-region","kind":"CLASS","parentKey":null,"name":"Region","signature":"Region(x, y, width, height, /, scale=\"fixed\", anchor=\"none\", scale_param=ScaleParam())","description":"พื้นที่สี่เหลี่ยมบนหน้าจอสำหรับค้นหาภาพหรือสี จับภาพ หรือวาดกรอบ พิกัดเป็นพิกเซลตามแกนนอนและแนวตั้งปัจจุบัน หลังปรับขนาดและระยะเลื่อนจะใช้เฉพาะส่วนที่อยู่ในหน้าจอ อ่านขนาดด้วย x, y, width, height = region","behavior":"พื้นที่สี่เหลี่ยมบนหน้าจอสำหรับค้นหาภาพหรือสี จับภาพ หรือวาดกรอบ พิกัดเป็นพิกเซลตามแกนนอนและแนวตั้งปัจจุบัน หลังปรับขนาดและระยะเลื่อนจะใช้เฉพาะส่วนที่อยู่ในหน้าจอ อ่านขนาดด้วย x, y, width, height = region","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"สร้างหรือคำนวณพื้นที่หน้าจอโดยไม่จับภาพหรือตรวจจับ แยก Region ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["x","y","width","height","scale","anchor","scale_param","middle_point"],"fieldDocs":[{"name":"x","type":"Number","defaultValue":null,"description":"Top-left horizontal coordinate.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"y","type":"Number","defaultValue":null,"description":"Top-left vertical coordinate.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"width","type":"Number","defaultValue":null,"description":"Region width in pixels.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"height","type":"Number","defaultValue":null,"description":"Region height in pixels.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"scale","type":"String","defaultValue":"fixed","description":"การปรับพิกัดระหว่างหน้าจอเต็ม: fixed คงพิกเซล; auto ปรับ X ตามอัตราส่วนความกว้างและ Y ตามความสูง; width หรือ height ปรับทั้งสองแกนตามมิตินั้น ใช้ขนาดหน้าจอต้นฉบับของมาโครโดยไม่หมุนแกนหรือใช้ขนาดหน้าต่างแอป","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"anchor","type":"String","defaultValue":"none","description":"ตำแหน่งอ้างอิงสำหรับปรับพิกัด: none (มุมซ้ายบน), center, top, bottom, left, right, top_left, top_right, bottom_left, bottom_right ส่วน auto เลือกขอบหรือจุดกึ่งกลางที่ใกล้ที่สุด","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"scale_param","type":"ScaleParam","defaultValue":"ScaleParam()","description":"**Applies to templates**. Template matching scale parameters used by find/wait methods on this region.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"middle_point","type":"Point","defaultValue":null,"description":"Center point of this region.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"x","type":"Number","defaultValue":null,"description":"Top-left X coordinate","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"y","type":"Number","defaultValue":null,"description":"Top-left Y coordinate","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"width","type":"Number","defaultValue":null,"description":"Region width","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"height","type":"Number","defaultValue":null,"description":"Region height","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"scale","type":"String","defaultValue":"fixed","description":"การปรับพิกัดระหว่างหน้าจอเต็ม: fixed คงพิกเซล; auto ปรับ X ตามอัตราส่วนความกว้างและ Y ตามความสูง; width หรือ height ปรับทั้งสองแกนตามมิตินั้น ใช้ขนาดหน้าจอต้นฉบับของมาโครโดยไม่หมุนแกนหรือใช้ขนาดหน้าต่างแอป","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"anchor","type":"String","defaultValue":"none","description":"ตำแหน่งอ้างอิงสำหรับปรับพิกัด: none (มุมซ้ายบน), center, top, bottom, left, right, top_left, top_right, bottom_left, bottom_right ส่วน auto เลือกขอบหรือจุดกึ่งกลางที่ใกล้ที่สุด","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"scale_param","type":"ScaleParam","defaultValue":"ScaleParam()","description":"**Applies to templates**. Template matching scale parameters.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"fieldExample":"search_area = Region(120, 240, 360, 420)\nleft = search_area.x\ntop = search_area.y\nw = search_area.width\nh = search_area.height\nscale = search_area.scale\nanchor = search_area.anchor\nsearch_area.x = 300\nsearch_area.scale_param = ScaleParam(auto_scale=True, template_scale=\"LONG_EDGE\")\ncenter = search_area.middle_point\n\n# แยก Region เป็น x, y, width, height\nx, y, width, height = search_area","constructorExample":"search_region = Region(120, 240, 360, 420)\nfixed_center = Region(120, 240, 360, 420, \"fixed\", \"center\")\nleft_lane = Region(120, 240, 360, 420, scale=\"width\", anchor=\"left\", scale_param=ScaleParam(auto_scale=True, template_scale=\"LONG_EDGE\"))","params":[],"returnType":null,"returnDescription":null,"example":"region = Region(100, 200, 300, 400)\nhit = region.find(\"img\", 3000, threshold=0.8, rate=3.0)","aliases":[],"group":null},{"key":"class-region-static-method-from-center","kind":"STATIC_METHOD","parentKey":"class-region","name":"from_center","signature":"Region.from_center(cx, cy, width, height)","description":"สร้าง Region แบบ fixed ไม่มี anchor จากพิกัดศูนย์กลางที่เป็นจำนวนจำกัดและขนาดบวกจำกัด โดยเก็บพิกัดทศนิยมไว้","behavior":"สร้าง Region แบบ fixed ไม่มี anchor จากพิกัดศูนย์กลางที่เป็นจำนวนจำกัดและขนาดบวกจำกัด โดยเก็บพิกัดทศนิยมไว้","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณจากค่าที่เก็บไว้โดยไม่จับภาพหน้าจอ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"cx","type":"Number","defaultValue":null,"description":"พิกัด X ของจุดศูนย์กลาง","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"cy","type":"Number","defaultValue":null,"description":"พิกัด Y ของจุดศูนย์กลาง","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"width","type":"Number","defaultValue":null,"description":"ความกว้างที่เป็นบวก","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"height","type":"Number","defaultValue":null,"description":"ความสูงที่เป็นบวก","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"พิกัดและขอบที่คำนวณได้ต้องเป็นจำนวนจำกัด มิฉะนั้นจะเกิดข้อผิดพลาด","example":"# สร้างบริเวณรอบจุดศูนย์กลาง\narea = Region.from_center(100, 200, 50, 30)","aliases":[],"group":"FLOW"},{"key":"class-region-static-method-highlighted","kind":"STATIC_METHOD","parentKey":"class-region","name":"highlighted","signature":"Region.highlighted()","description":"คืนพื้นที่หน้าจอที่สคริปต์กำลังวาดกรอบ รวมกรอบสี่เหลี่ยมจัตุรัสจาก Point.highlight()","behavior":"คืนพื้นที่หน้าจอที่สคริปต์กำลังวาดกรอบ รวมกรอบสี่เหลี่ยมจัตุรัสจาก Point.highlight()","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list[Region]","returnDescription":"รายการภูมิภาคที่ไฮไลท์ที่ใช้งานอยู่","example":"active_regions = Region.highlighted()\nfor area in active_regions:\n    area.highlight(\"yellow\", auto_hide_ms=500)","aliases":[],"group":"FLOW"},{"key":"class-region-static-method-full-screen","kind":"STATIC_METHOD","parentKey":"class-region","name":"full_screen","signature":"Region.full_screen()","description":"กลับขอบเขตเต็มหน้าจอปัจจุบัน","behavior":"กลับขอบเขตเต็มหน้าจอปัจจุบัน","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Region","returnDescription":"Region ที่ครอบคลุมหน้าจอปัจจุบันทั้งหมด เริ่มจาก (0, 0)","example":"scan = Region.full_screen()\nhit = scan.find(\"ok\", 2000)","aliases":[],"group":"FLOW"},{"key":"class-region-static-method-highlight-off","kind":"STATIC_METHOD","parentKey":"class-region","name":"highlight_off","signature":"Region.highlight_off()","description":"ปิดไฮไลท์ภูมิภาคที่ใช้งานอยู่ทั้งหมด","behavior":"ปิดไฮไลท์ภูมิภาคที่ใช้งานอยู่ทั้งหมด","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"ไม่มีค่า.","example":"scan = Region(120, 260, 280, 160)\nscan.highlight(\"green\")\nwait(1000)\nRegion.highlight_off()","aliases":[],"group":"FLOW"},{"key":"class-region-static-method-macro-width","kind":"STATIC_METHOD","parentKey":"class-region","name":"macro_width","signature":"Region.macro_width()","description":"Return the screen width of the device that created this macro, adapted to current screen orientation, when available.","behavior":"Return the screen width of the device that created this macro, adapted to current screen orientation, when available.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number?","returnDescription":"ความกว้างของหน้าจอแหล่งมาโคร หรือไม่มี เมื่อไม่พร้อมใช้งาน","example":"macro_w = Region.macro_width()","aliases":[],"group":"FLOW"},{"key":"class-region-static-method-macro-height","kind":"STATIC_METHOD","parentKey":"class-region","name":"macro_height","signature":"Region.macro_height()","description":"Return the screen height of the device that created this macro, adapted to current screen orientation, when available.","behavior":"Return the screen height of the device that created this macro, adapted to current screen orientation, when available.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number?","returnDescription":"ความสูงของหน้าจอที่มาโคร หรือไม่มี เมื่อไม่พร้อมใช้งาน","example":"macro_h = Region.macro_height()","aliases":[],"group":"FLOW"},{"key":"class-region-method-intersection","kind":"METHOD","parentKey":"class-region","name":"intersection","signature":"region.intersection(other)","description":"คืนส่วนซ้อนทับที่มีพื้นที่บวกเป็น Region ใหม่ หรือ None ขอบที่แตะกันไม่นับว่าซ้อนทับ ใช้พิกัดที่เก็บไว้ในระบบเดียวกันโดยไม่จับภาพ ปรับขนาดหรือตัด และคง scale, anchor และ scale_param ของ Region นี้โดยไม่แก้ไขต้นฉบับ","behavior":"คืนส่วนซ้อนทับที่มีพื้นที่บวกเป็น Region ใหม่ หรือ None ขอบที่แตะกันไม่นับว่าซ้อนทับ ใช้พิกัดที่เก็บไว้ในระบบเดียวกันโดยไม่จับภาพ ปรับขนาดหรือตัด และคง scale, anchor และ scale_param ของ Region นี้โดยไม่แก้ไขต้นฉบับ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณจากค่าที่เก็บไว้โดยไม่จับภาพหน้าจอ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"Region","defaultValue":null,"description":"บริเวณอีกบริเวณหนึ่ง","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Region?","returnDescription":"พิกัดและขอบที่คำนวณได้ต้องเป็นจำนวนจำกัด มิฉะนั้นจะเกิดข้อผิดพลาด","example":"# หาบริเวณที่ซ้อนทับ\noverlap = Region(0, 0, 100, 100).intersection(Region(50, 50, 100, 100))","aliases":[],"group":"FLOW"},{"key":"class-region-method-intersects","kind":"METHOD","parentKey":"class-region","name":"intersects","signature":"region.intersects(other)","description":"ตรวจสอบพื้นที่ซ้อนทับที่เป็นบวกด้วยพิกัดที่เก็บไว้ในระบบเดียวกัน ขอบที่แตะกันไม่นับว่าซ้อนทับ โดยไม่จับภาพ ปรับขนาดหรือตัด","behavior":"ตรวจสอบพื้นที่ซ้อนทับที่เป็นบวกด้วยพิกัดที่เก็บไว้ในระบบเดียวกัน ขอบที่แตะกันไม่นับว่าซ้อนทับ โดยไม่จับภาพ ปรับขนาดหรือตัด","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณจากค่าที่เก็บไว้โดยไม่จับภาพหน้าจอ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"Region","defaultValue":null,"description":"บริเวณอีกบริเวณหนึ่ง","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"พิกัดและขอบที่คำนวณได้ต้องเป็นจำนวนจำกัด มิฉะนั้นจะเกิดข้อผิดพลาด","example":"# ตรวจสอบว่าสองบริเวณซ้อนทับกันหรือไม่\nprint(Region(0, 0, 100, 100).intersects(Region(50, 50, 20, 20)))","aliases":[],"group":"FLOW"},{"key":"class-region-method-contains","kind":"METHOD","parentKey":"class-region","name":"contains","signature":"region.contains(point_or_region)","description":"ตรวจสอบการอยู่ภายในด้วยพิกัดที่เก็บไว้ในระบบเดียวกัน โดยไม่จับภาพ ปรับขนาดหรือตัด จุดบนขอบซ้ายและบนถือว่าอยู่ภายใน แต่ขอบขวาและล่างไม่อยู่ภายใน Region อาจมีขอบร่วมกันได้ ขนาดว่างหรือติดลบคืน False","behavior":"ตรวจสอบการอยู่ภายในด้วยพิกัดที่เก็บไว้ในระบบเดียวกัน โดยไม่จับภาพ ปรับขนาดหรือตัด จุดบนขอบซ้ายและบนถือว่าอยู่ภายใน แต่ขอบขวาและล่างไม่อยู่ภายใน Region อาจมีขอบร่วมกันได้ ขนาดว่างหรือติดลบคืน False","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณจากค่าที่เก็บไว้โดยไม่จับภาพหน้าจอ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"point_or_region","type":"Point | Region","defaultValue":null,"description":"จุดหรือบริเวณที่ต้องการตรวจสอบ","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"พิกัดและขอบที่คำนวณได้ต้องเป็นจำนวนจำกัด มิฉะนั้นจะเกิดข้อผิดพลาด","example":"# ตรวจสอบว่าจุดอยู่ในบริเวณหรือไม่\nprint(Region(0, 0, 100, 100).contains(Point(10, 10)))","aliases":[],"group":"FLOW"},{"key":"class-region-method-find","kind":"METHOD","parentKey":"class-region","name":"find","signature":"region.find(template, timeout=0, threshold=0.7, rate=3.0)","description":"ค้นหาตำแหน่งที่ตรงกับแม่แบบหนึ่งจุดในพื้นที่นี้ ลองซ้ำจนพบหรือหมดเวลา; timeout=0 สแกนครั้งเดียว ต้องพร้อมจับภาพหน้าจอ ScreenCapture.cache_on() ทำให้ใช้ภาพเดิมจนเรียก cache_off(); โดยปกติจะใช้ภาพซ้ำอัตโนมัติสูงสุด 100 ms ใช้ auto_cache_off() เพื่อรับภาพล่าสุดที่มี แต่ต้องจับภาพเพิ่ม","behavior":"ค้นหาตำแหน่งที่ตรงกับแม่แบบหนึ่งจุดในพื้นที่นี้ ลองซ้ำจนพบหรือหมดเวลา; timeout=0 สแกนครั้งเดียว ต้องพร้อมจับภาพหน้าจอ ScreenCapture.cache_on() ทำให้ใช้ภาพเดิมจนเรียก cache_off(); โดยปกติจะใช้ภาพซ้ำอัตโนมัติสูงสุด 100 ms ใช้ auto_cache_off() เพื่อรับภาพล่าสุดที่มี แต่ต้องจับภาพเพิ่ม","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"รอการจับภาพร่วมและตรวจจับ find* ค้นหาการปรากฏ ส่วน wait* รอให้หายไป แม้ตรวจครั้งเดียวก็ใช้เวลา timeout/rate ไม่ได้ทำให้ข้ามการรอ"},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"template","type":"String | Template","defaultValue":null,"description":"ชื่อแม่แบบหรือเส้นทางโฟลเดอร์สัมพัทธ์ที่ไม่ใส่นามสกุลภาพในมาโครปัจจุบัน หรือออบเจ็กต์ Template ชื่อที่ไม่พบทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"เวลารอสูงสุดเป็นมิลลิวินาที หากไม่ระบุ เป็นศูนย์ หรือติดลบ จะสแกนครั้งเดียว การสแกนที่เริ่มแล้วอาจเสร็จหลังเวลานี้","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number","defaultValue":"0.7","description":"Match threshold from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3.0","description":"จำนวนสแกนที่ขอต่อวินาทีขณะรอ จำกัดที่ 1-60 ความเร็วจริงขึ้นกับเวลาที่ใช้รู้จำ","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Match ที่มี found=True เมื่อพบ มิฉะนั้น found=False หลังสแกนหรือหมดเวลา ไม่คืน None","example":"region = Region(80, 220, 420, 520)\nhit = region.find(\"ok\", 4000, 0.8, 4.0)\nMacroPanel.notify(str(hit))","aliases":[],"group":"FLOW"},{"key":"class-region-method-find-multi","kind":"METHOD","parentKey":"class-region","name":"find_multi","signature":"region.find_multi(template, timeout=0, threshold=0.7, rate=3.0)","description":"สแกนภายในภูมิภาคนี้และส่งคืนรายการที่ตรงกันทั้งหมดสำหรับเทมเพลตเดียวเมื่อพบอย่างน้อยหนึ่งรายการ หากละเว้นการหมดเวลา ระบบจะดำเนินการสแกนเพียงครั้งเดียวเท่านั้น","behavior":"สแกนภายในภูมิภาคนี้และส่งคืนรายการที่ตรงกันทั้งหมดสำหรับเทมเพลตเดียวเมื่อพบอย่างน้อยหนึ่งรายการ หากละเว้นการหมดเวลา ระบบจะดำเนินการสแกนเพียงครั้งเดียวเท่านั้น","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"รอการจับภาพร่วมและตรวจจับ find* ค้นหาการปรากฏ ส่วน wait* รอให้หายไป แม้ตรวจครั้งเดียวก็ใช้เวลา timeout/rate ไม่ได้ทำให้ข้ามการรอ"},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"template","type":"String | Template","defaultValue":null,"description":"ชื่อแม่แบบหรือเส้นทางโฟลเดอร์สัมพัทธ์ที่ไม่ใส่นามสกุลภาพในมาโครปัจจุบัน หรือออบเจ็กต์ Template ชื่อที่ไม่พบทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"เวลารอสูงสุดเป็นมิลลิวินาที หากไม่ระบุ เป็นศูนย์ หรือติดลบ จะสแกนครั้งเดียว การสแกนที่เริ่มแล้วอาจเสร็จหลังเวลานี้","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number","defaultValue":"0.7","description":"Match threshold from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3.0","description":"จำนวนสแกนที่ขอต่อวินาทีขณะรอ จำกัดที่ 1-60 ความเร็วจริงขึ้นกับเวลาที่ใช้รู้จำ","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"รายการที่ตรงกันทั้งหมดสำหรับเทมเพลต หรือรายการว่างเมื่อหมดเวลา","example":"region = Region(80, 220, 420, 520)\nmatches = region.find_multi(\"enemy\", 3000)\nMacroPanel.notify(str(matches))","aliases":[],"group":"FLOW"},{"key":"class-region-method-find-any","kind":"METHOD","parentKey":"class-region","name":"find_any","signature":"region.find_any(templates, timeout=0, threshold=0.7, rate=3.0)","description":"สแกนขอบเขตนี้และกลับมาเมื่อพบเทมเพลตในรายการ หากละเว้นการหมดเวลา ระบบจะดำเนินการสแกนเพียงครั้งเดียวเท่านั้น","behavior":"สแกนขอบเขตนี้และกลับมาเมื่อพบเทมเพลตในรายการ หากละเว้นการหมดเวลา ระบบจะดำเนินการสแกนเพียงครั้งเดียวเท่านั้น","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"รอการจับภาพร่วมและตรวจจับ find* ค้นหาการปรากฏ ส่วน wait* รอให้หายไป แม้ตรวจครั้งเดียวก็ใช้เวลา timeout/rate ไม่ได้ทำให้ข้ามการรอ"},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"templates","type":"list[String | Template]","defaultValue":null,"description":"ชื่อแม่แบบ/เส้นทางโฟลเดอร์สัมพัทธ์โดยไม่ใส่นามสกุลภาพ หรือออบเจ็กต์ Template ชื่อที่ไม่พบทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"เวลารอสูงสุดเป็นมิลลิวินาที หากไม่ระบุ เป็นศูนย์ หรือติดลบ จะสแกนครั้งเดียว การสแกนที่เริ่มแล้วอาจเสร็จหลังเวลานี้","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number","defaultValue":"0.7","description":"Match threshold from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3.0","description":"จำนวนสแกนที่ขอต่อวินาทีขณะรอ จำกัดที่ 1-60 ความเร็วจริงขึ้นกับเวลาที่ใช้รู้จำ","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Match หนึ่งรายการต่อแม่แบบตามลำดับอินพุต เมื่อพบอย่างน้อยหนึ่งภาพ บางรายการอาจมี found=False คืน MatchList ว่างหากไม่พบภาพใดก่อนหมดเวลา","example":"region = Region(80, 220, 420, 520)\nmatches = region.find_any([\"enemy_a\", \"enemy_b\"], 2500)\nMacroPanel.notify(str(matches))","aliases":[],"group":"FLOW"},{"key":"class-region-method-find-all","kind":"METHOD","parentKey":"class-region","name":"find_all","signature":"region.find_all(templates, timeout=0, threshold=0.7, rate=3.0)","description":"สแกนขอบเขตนี้และกลับมาเมื่อพบทุกเทมเพลตในรายการเท่านั้น หากละเว้นการหมดเวลา ระบบจะดำเนินการสแกนเพียงครั้งเดียวเท่านั้น","behavior":"สแกนขอบเขตนี้และกลับมาเมื่อพบทุกเทมเพลตในรายการเท่านั้น หากละเว้นการหมดเวลา ระบบจะดำเนินการสแกนเพียงครั้งเดียวเท่านั้น","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"รอการจับภาพร่วมและตรวจจับ find* ค้นหาการปรากฏ ส่วน wait* รอให้หายไป แม้ตรวจครั้งเดียวก็ใช้เวลา timeout/rate ไม่ได้ทำให้ข้ามการรอ"},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"templates","type":"list[String | Template]","defaultValue":null,"description":"ชื่อแม่แบบ/เส้นทางโฟลเดอร์สัมพัทธ์โดยไม่ใส่นามสกุลภาพ หรือออบเจ็กต์ Template ชื่อที่ไม่พบทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"เวลารอสูงสุดเป็นมิลลิวินาที หากไม่ระบุ เป็นศูนย์ หรือติดลบ จะสแกนครั้งเดียว การสแกนที่เริ่มแล้วอาจเสร็จหลังเวลานี้","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number","defaultValue":"0.7","description":"Match threshold from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3.0","description":"จำนวนสแกนที่ขอต่อวินาทีขณะรอ จำกัดที่ 1-60 ความเร็วจริงขึ้นกับเวลาที่ใช้รู้จำ","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Match ที่พบหนึ่งรายการต่อแม่แบบตามลำดับอินพุต หรือ MatchList ว่างหากไม่มีการสแกนใดพบครบก่อนหมดเวลา","example":"region = Region(80, 220, 420, 520)\nmatches = region.find_all([\"hp\", \"mp\"], 5000)\nMacroPanel.notify(str(matches))","aliases":[],"group":"FLOW"},{"key":"class-region-method-find-color","kind":"METHOD","parentKey":"class-region","name":"find_color","signature":"region.find_color(color, timeout=0, tolerance=0, rate=3, interval=10)","description":"ค้นหาพิกเซลที่ตรวจซึ่งมีสีใกล้เป้าหมายที่สุดในพื้นที่นี้ แต่ละช่องสีแดง เขียว และน้ำเงินต้องต่างไม่เกิน tolerance โดยเลือกจุดที่มีความต่างสูงสุดของช่องสีน้อยที่สุด ลองซ้ำจนพบหรือหมดเวลา; timeout=0 สแกนครั้งเดียว ต้องพร้อมจับภาพหน้าจอ","behavior":"ค้นหาพิกเซลที่ตรวจซึ่งมีสีใกล้เป้าหมายที่สุดในพื้นที่นี้ แต่ละช่องสีแดง เขียว และน้ำเงินต้องต่างไม่เกิน tolerance โดยเลือกจุดที่มีความต่างสูงสุดของช่องสีน้อยที่สุด ลองซ้ำจนพบหรือหมดเวลา; timeout=0 สแกนครั้งเดียว ต้องพร้อมจับภาพหน้าจอ","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"รอการจับภาพร่วมและตรวจจับ find* ค้นหาการปรากฏ ส่วน wait* รอให้หายไป แม้ตรวจครั้งเดียวก็ใช้เวลา timeout/rate ไม่ได้ทำให้ข้ามการรอ"},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"color","type":"Color | String | Number","defaultValue":null,"description":"Target color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"เวลารอสูงสุดเป็นมิลลิวินาที หากไม่ระบุ เป็นศูนย์ หรือติดลบ จะสแกนครั้งเดียว การสแกนที่เริ่มแล้วอาจเสร็จหลังเวลานี้","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"tolerance","type":"Number","defaultValue":"0","description":"Allowed per-channel RGB delta from 0 to 255.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3","description":"จำนวนสแกนที่ขอต่อวินาทีขณะรอ จำกัดที่ 1-60 ความเร็วจริงขึ้นกับเวลาที่ใช้รู้จำ","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"interval","type":"Number","defaultValue":"10","description":"ระยะห่างที่ขอเป็นพิกเซลระหว่างตำแหน่งที่ตรวจ อย่างน้อย 1 ค่าน้อยตรวจพิกเซลมากขึ้นและอาจใช้เวลานานขึ้น ระยะห่างอาจเพิ่มอัตโนมัติสำหรับพื้นที่ขนาดใหญ่","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Match ที่มี Point ใน point ไม่เกินหนึ่งรายการ หรือ found=False และ point ว่างหากไม่มีพิกเซลที่ตรวจตรงกันหรือจับภาพไม่ได้","example":"scan = Region(80, 220, 420, 520)\nhit = scan.find_color(\"#FF4CAF50\", tolerance=8, interval=4)\nif hit.found:\n    click(hit.point[0], random=0)","aliases":[],"group":"FLOW"},{"key":"class-region-method-find-any-color","kind":"METHOD","parentKey":"class-region","name":"find_any_color","signature":"region.find_any_color(colors, timeout=0, tolerance=0, rate=3, interval=10)","description":"ค้นหาสีเป้าหมายใดก็ได้ในพื้นที่นี้ตามกฎความคลาดเคลื่อน RGB ของ find_color คืนจุดที่ตรวจที่ดีที่สุดไม่เกินหนึ่งจุดต่อสีที่พบ ตามลำดับอินพุต ลองซ้ำจนพบอย่างน้อยหนึ่งสีหรือหมดเวลา; timeout=0 สแกนครั้งเดียว ต้องพร้อมจับภาพหน้าจอ","behavior":"ค้นหาสีเป้าหมายใดก็ได้ในพื้นที่นี้ตามกฎความคลาดเคลื่อน RGB ของ find_color คืนจุดที่ตรวจที่ดีที่สุดไม่เกินหนึ่งจุดต่อสีที่พบ ตามลำดับอินพุต ลองซ้ำจนพบอย่างน้อยหนึ่งสีหรือหมดเวลา; timeout=0 สแกนครั้งเดียว ต้องพร้อมจับภาพหน้าจอ","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"รอการจับภาพร่วมและตรวจจับ find* ค้นหาการปรากฏ ส่วน wait* รอให้หายไป แม้ตรวจครั้งเดียวก็ใช้เวลา timeout/rate ไม่ได้ทำให้ข้ามการรอ"},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"colors","type":"list[Color | String | Number] | tuple[Color | String | Number]","defaultValue":null,"description":"Target colors.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"เวลารอสูงสุดเป็นมิลลิวินาที หากไม่ระบุ เป็นศูนย์ หรือติดลบ จะสแกนครั้งเดียว การสแกนที่เริ่มแล้วอาจเสร็จหลังเวลานี้","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"tolerance","type":"Number","defaultValue":"0","description":"Allowed per-channel RGB delta from 0 to 255.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3","description":"จำนวนสแกนที่ขอต่อวินาทีขณะรอ จำกัดที่ 1-60 ความเร็วจริงขึ้นกับเวลาที่ใช้รู้จำ","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"interval","type":"Number","defaultValue":"10","description":"ระยะห่างที่ขอเป็นพิกเซลระหว่างตำแหน่งที่ตรวจ อย่างน้อย 1 ค่าน้อยตรวจพิกเซลมากขึ้นและอาจใช้เวลานานขึ้น ระยะห่างอาจเพิ่มอัตโนมัติสำหรับพื้นที่ขนาดใหญ่","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Match ที่มี Point ที่ดีที่สุดต่อสีที่พบใน point ตามลำดับอินพุต เป็น found=False และ point ว่างหากไม่มีสีตรงกันหรือจับภาพไม่ได้","example":"colors = [\"#FF0000\", \"#00FF00\", \"#0000FF\"]\nhit = Region.full_screen().find_any_color(colors, tolerance=6)\nif hit.found:\n    click(hit, random=0)","aliases":[],"group":"FLOW"},{"key":"class-region-method-find-multi-color","kind":"METHOD","parentKey":"class-region","name":"find_multi_color","signature":"region.find_multi_color(color, timeout=0, tolerance=0, rate=3, interval=10)","description":"ค้นหาพิกเซลที่ตรวจทั้งหมดซึ่งตรงกับสีเป้าหมายหนึ่งสีตามกฎความคลาดเคลื่อน RGB ของ find_color การส่งรายการหรือ tuple ของสีทำให้เกิดข้อผิดพลาด ลองซ้ำจนพบอย่างน้อยหนึ่งจุดหรือหมดเวลา; timeout=0 สแกนครั้งเดียว ต้องพร้อมจับภาพหน้าจอ","behavior":"ค้นหาพิกเซลที่ตรวจทั้งหมดซึ่งตรงกับสีเป้าหมายหนึ่งสีตามกฎความคลาดเคลื่อน RGB ของ find_color การส่งรายการหรือ tuple ของสีทำให้เกิดข้อผิดพลาด ลองซ้ำจนพบอย่างน้อยหนึ่งจุดหรือหมดเวลา; timeout=0 สแกนครั้งเดียว ต้องพร้อมจับภาพหน้าจอ","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"รอการจับภาพร่วมและตรวจจับ find* ค้นหาการปรากฏ ส่วน wait* รอให้หายไป แม้ตรวจครั้งเดียวก็ใช้เวลา timeout/rate ไม่ได้ทำให้ข้ามการรอ"},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"color","type":"Color | String | Number","defaultValue":null,"description":"Single target color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"เวลารอสูงสุดเป็นมิลลิวินาที หากไม่ระบุ เป็นศูนย์ หรือติดลบ จะสแกนครั้งเดียว การสแกนที่เริ่มแล้วอาจเสร็จหลังเวลานี้","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"tolerance","type":"Number","defaultValue":"0","description":"Allowed per-channel RGB delta from 0 to 255.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3","description":"จำนวนสแกนที่ขอต่อวินาทีขณะรอ จำกัดที่ 1-60 ความเร็วจริงขึ้นกับเวลาที่ใช้รู้จำ","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"interval","type":"Number","defaultValue":"10","description":"ระยะห่างที่ขอเป็นพิกเซลระหว่างตำแหน่งที่ตรวจ อย่างน้อย 1 ค่าน้อยตรวจพิกเซลมากขึ้นและอาจใช้เวลานานขึ้น ระยะห่างอาจเพิ่มอัตโนมัติสำหรับพื้นที่ขนาดใหญ่","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Match ที่เก็บ Point ที่ตรวจแล้วตรงกันใน point โดยสีใกล้ที่สุดอยู่ก่อน เป็น found=False และ point ว่างหากไม่มีจุดตรงกันหรือจับภาพไม่ได้","example":"hit = Region(80, 220, 420, 520).find_multi_color(\"red\", tolerance=4, interval=3)\nif hit.found:\n    first = hit.point[0]\n    hit.highlight(color=\"yellow\", auto_hide_ms=800)","aliases":[],"group":"FLOW"},{"key":"class-region-method-wait","kind":"METHOD","parentKey":"class-region","name":"wait","signature":"region.wait(template, timeout=0, threshold=0.7, rate=3.0)","description":"รอจนกระทั่งเทมเพลตหายไปจากภูมิภาคนี้ หากละเว้นการหมดเวลา ระบบจะดำเนินการสแกนเพียงครั้งเดียวเท่านั้น","behavior":"รอจนกระทั่งเทมเพลตหายไปจากภูมิภาคนี้ หากละเว้นการหมดเวลา ระบบจะดำเนินการสแกนเพียงครั้งเดียวเท่านั้น","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"รอการจับภาพร่วมและตรวจจับ find* ค้นหาการปรากฏ ส่วน wait* รอให้หายไป แม้ตรวจครั้งเดียวก็ใช้เวลา timeout/rate ไม่ได้ทำให้ข้ามการรอ"},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"template","type":"String | Template","defaultValue":null,"description":"ชื่อแม่แบบหรือเส้นทางโฟลเดอร์สัมพัทธ์ที่ไม่ใส่นามสกุลภาพในมาโครปัจจุบัน หรือออบเจ็กต์ Template ชื่อที่ไม่พบทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"เวลารอสูงสุดเป็นมิลลิวินาที หากไม่ระบุ เป็นศูนย์ หรือติดลบ จะสแกนครั้งเดียว การสแกนที่เริ่มแล้วอาจเสร็จหลังเวลานี้","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number","defaultValue":"0.7","description":"Match threshold from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3.0","description":"จำนวนสแกนที่ขอต่อวินาทีขณะรอ จำกัดที่ 1-60 ความเร็วจริงขึ้นกับเวลาที่ใช้รู้จำ","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Match ล่าสุด: found=False หมายถึงไม่พบภาพ; found=True หมายถึงยังพบภาพเมื่อสิ้นสุดการรอ ไม่คืน None ต้องพร้อมจับภาพหน้าจอ; หากจับภาพไม่ได้ก็อาจได้ found=False","example":"region = Region(0, 0, 1080, 2400)\nresult = region.wait(\"loading\", 8000)\nMacroPanel.notify(str(result))","aliases":[],"group":"FLOW"},{"key":"class-region-method-wait-any","kind":"METHOD","parentKey":"class-region","name":"wait_any","signature":"region.wait_any(templates, timeout=0, threshold=0.7, rate=3.0)","description":"รอจนกระทั่งเทมเพลตในรายการหายไปจากภูมิภาคนี้ หากละเว้นการหมดเวลา ระบบจะดำเนินการสแกนเพียงครั้งเดียวเท่านั้น","behavior":"รอจนกระทั่งเทมเพลตในรายการหายไปจากภูมิภาคนี้ หากละเว้นการหมดเวลา ระบบจะดำเนินการสแกนเพียงครั้งเดียวเท่านั้น","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"รอการจับภาพร่วมและตรวจจับ find* ค้นหาการปรากฏ ส่วน wait* รอให้หายไป แม้ตรวจครั้งเดียวก็ใช้เวลา timeout/rate ไม่ได้ทำให้ข้ามการรอ"},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"templates","type":"list[String | Template]","defaultValue":null,"description":"ชื่อแม่แบบ/เส้นทางโฟลเดอร์สัมพัทธ์โดยไม่ใส่นามสกุลภาพ หรือออบเจ็กต์ Template ชื่อที่ไม่พบทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"เวลารอสูงสุดเป็นมิลลิวินาที หากไม่ระบุ เป็นศูนย์ หรือติดลบ จะสแกนครั้งเดียว การสแกนที่เริ่มแล้วอาจเสร็จหลังเวลานี้","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number","defaultValue":"0.7","description":"Match threshold from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3.0","description":"จำนวนสแกนที่ขอต่อวินาทีขณะรอ จำกัดที่ 1-60 ความเร็วจริงขึ้นกับเวลาที่ใช้รู้จำ","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Match ล่าสุดของแต่ละแม่แบบตามลำดับอินพุต เมื่อภาพหายไปหรือหมดเวลา ตรวจ found ของแต่ละรายการ; False หมายถึงไม่พบภาพนั้น ต้องพร้อมจับภาพหน้าจอ; หากจับภาพไม่ได้ก็อาจได้ found=False","example":"watch = [\"loading\", \"syncing\"]\nresult = region.wait_any(watch, 10000)\nMacroPanel.notify(str(result))","aliases":[],"group":"FLOW"},{"key":"class-region-method-wait-all","kind":"METHOD","parentKey":"class-region","name":"wait_all","signature":"region.wait_all(templates, timeout=0, threshold=0.7, rate=3.0)","description":"รอจนกระทั่งเทมเพลตทั้งหมดในรายการหายไปจากภูมิภาคนี้ หากละเว้นการหมดเวลา ระบบจะดำเนินการสแกนเพียงครั้งเดียวเท่านั้น","behavior":"รอจนกระทั่งเทมเพลตทั้งหมดในรายการหายไปจากภูมิภาคนี้ หากละเว้นการหมดเวลา ระบบจะดำเนินการสแกนเพียงครั้งเดียวเท่านั้น","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"รอการจับภาพร่วมและตรวจจับ find* ค้นหาการปรากฏ ส่วน wait* รอให้หายไป แม้ตรวจครั้งเดียวก็ใช้เวลา timeout/rate ไม่ได้ทำให้ข้ามการรอ"},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"templates","type":"list[String | Template]","defaultValue":null,"description":"ชื่อแม่แบบ/เส้นทางโฟลเดอร์สัมพัทธ์โดยไม่ใส่นามสกุลภาพ หรือออบเจ็กต์ Template ชื่อที่ไม่พบทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"เวลารอสูงสุดเป็นมิลลิวินาที หากไม่ระบุ เป็นศูนย์ หรือติดลบ จะสแกนครั้งเดียว การสแกนที่เริ่มแล้วอาจเสร็จหลังเวลานี้","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number","defaultValue":"0.7","description":"Match threshold from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3.0","description":"จำนวนสแกนที่ขอต่อวินาทีขณะรอ จำกัดที่ 1-60 ความเร็วจริงขึ้นกับเวลาที่ใช้รู้จำ","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Match ล่าสุดของแต่ละแม่แบบตามลำดับอินพุต เมื่อภาพหายไปหรือหมดเวลา ค่า found ทั้งหมดเป็น False ต่อเมื่อไม่พบทุกภาพ ต้องพร้อมจับภาพหน้าจอ; หากจับภาพไม่ได้ก็อาจได้ found=False","example":"watch = [\"loading\", \"syncing\"]\nresult = region.wait_all(watch, 10000)\nMacroPanel.notify(str(result))","aliases":[],"group":"FLOW"},{"key":"class-region-method-capture","kind":"METHOD","parentKey":"class-region","name":"capture","signature":"region.capture(name=None)","description":"จับภาพพื้นที่หน้าจอนี้เป็น Template ต้องมีเซสชันจับภาพหน้าจอที่ทำงานและผู้ใช้อนุญาตแล้ว เกิดข้อผิดพลาดหากจับภาพไม่ได้หรือพื้นที่อยู่นอกหน้าจอทั้งหมด","behavior":"จับภาพพื้นที่หน้าจอนี้เป็น Template ต้องมีเซสชันจับภาพหน้าจอที่ทำงานและผู้ใช้อนุญาตแล้ว เกิดข้อผิดพลาดหากจับภาพไม่ได้หรือพื้นที่อยู่นอกหน้าจอทั้งหมด","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"รอการจับภาพร่วมและตรวจจับ find* ค้นหาการปรากฏ ส่วน wait* รอให้หายไป แม้ตรวจครั้งเดียวก็ใช้เวลา timeout/rate ไม่ได้ทำให้ข้ามการรอ"},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String?","defaultValue":"None","description":"ระบุชื่อเพื่อบันทึกภาพลงมาโครปัจจุบันทันที; None สร้างภาพชั่วคราว ไม่อนุญาตให้บันทึกภาพที่มีชื่อในมาโครที่ได้รับการป้องกัน","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Template","returnDescription":"Template ที่มีภาพที่เพิ่งจับ","example":"sample = Region(120, 280, 220, 120).capture()\nsaved = sample.save_as(\"buttons/top/enemy_slot\")","aliases":[],"group":"FLOW"},{"key":"class-region-method-left","kind":"METHOD","parentKey":"class-region","name":"left","signature":"region.left(value=0.5)","description":"ย่อส่วนนี้ไปทางด้านซ้าย ขอบด้านขวาเลื่อนไปทางซ้ายตามจำนวนที่ร้องขอ","behavior":"ย่อส่วนนี้ไปทางด้านซ้าย ขอบด้านขวาเลื่อนไปทางซ้ายตามจำนวนที่ร้องขอ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"สร้างหรือคำนวณพื้นที่หน้าจอโดยไม่จับภาพหรือตรวจจับ แยก Region ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"ความกว้างที่จะตัดออก: 0-1 เป็นสัดส่วนของความกว้างปัจจุบัน; มากกว่า 1 เป็นพิกเซล ไม่เกินความกว้างทั้งหมด ค่าลบทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"ขอบเขตใหม่แคบลงจากขอบด้านขวา","example":"full = Region(100, 200, 1000, 500)\nleft_focus = full.left(0.4)\nleft_focus_px = full.left(400)","aliases":[],"group":"FLOW"},{"key":"class-region-method-right","kind":"METHOD","parentKey":"class-region","name":"right","signature":"region.right(value=0.5)","description":"ย่อส่วนนี้ไปทางด้านขวา ขอบซ้ายเลื่อนไปทางขวาตามจำนวนที่ร้องขอ","behavior":"ย่อส่วนนี้ไปทางด้านขวา ขอบซ้ายเลื่อนไปทางขวาตามจำนวนที่ร้องขอ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"สร้างหรือคำนวณพื้นที่หน้าจอโดยไม่จับภาพหรือตรวจจับ แยก Region ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"ความกว้างที่จะตัดออก: 0-1 เป็นสัดส่วนของความกว้างปัจจุบัน; มากกว่า 1 เป็นพิกเซล ไม่เกินความกว้างทั้งหมด ค่าลบทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"ขอบเขตใหม่แคบลงจากขอบด้านซ้าย","example":"full = Region(100, 200, 1000, 500)\nright_focus = full.right(0.3)\nright_focus_px = full.right(240)","aliases":[],"group":"FLOW"},{"key":"class-region-method-top","kind":"METHOD","parentKey":"class-region","name":"top","signature":"region.top(value=0.5)","description":"ย่อส่วนนี้ไปทางด้านบน ขอบด้านล่างเลื่อนขึ้นตามจำนวนที่ร้องขอ","behavior":"ย่อส่วนนี้ไปทางด้านบน ขอบด้านล่างเลื่อนขึ้นตามจำนวนที่ร้องขอ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"สร้างหรือคำนวณพื้นที่หน้าจอโดยไม่จับภาพหรือตรวจจับ แยก Region ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"ความสูงที่จะตัดออก: 0-1 เป็นสัดส่วนของความสูงปัจจุบัน; มากกว่า 1 เป็นพิกเซล ไม่เกินความสูงทั้งหมด ค่าลบทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"ขอบเขตใหม่แคบลงจากขอบด้านล่าง","example":"full = Region(100, 200, 1000, 500)\ntop_focus = full.top(0.25)\ntop_focus_px = full.top(120)","aliases":[],"group":"FLOW"},{"key":"class-region-method-bottom","kind":"METHOD","parentKey":"class-region","name":"bottom","signature":"region.bottom(value=0.5)","description":"ย่อส่วนนี้ไปทางด้านล่าง ขอบด้านบนเลื่อนลงตามจำนวนที่ร้องขอ","behavior":"ย่อส่วนนี้ไปทางด้านล่าง ขอบด้านบนเลื่อนลงตามจำนวนที่ร้องขอ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"สร้างหรือคำนวณพื้นที่หน้าจอโดยไม่จับภาพหรือตรวจจับ แยก Region ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"ความสูงที่จะตัดออก: 0-1 เป็นสัดส่วนของความสูงปัจจุบัน; มากกว่า 1 เป็นพิกเซล ไม่เกินความสูงทั้งหมด ค่าลบทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"ขอบเขตใหม่แคบลงจากขอบด้านบน","example":"full = Region(100, 200, 1000, 500)\nbottom_focus = full.bottom(0.25)\nbottom_focus_px = full.bottom(120)","aliases":[],"group":"FLOW"},{"key":"class-region-method-horizontal","kind":"METHOD","parentKey":"class-region","name":"horizontal","signature":"region.horizontal(value=0.5)","description":"ย่อแนวนอนไปทางกึ่งกลางโดยเลื่อนขอบทั้งซ้ายและขวาเข้าด้านใน","behavior":"ย่อแนวนอนไปทางกึ่งกลางโดยเลื่อนขอบทั้งซ้ายและขวาเข้าด้านใน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"สร้างหรือคำนวณพื้นที่หน้าจอโดยไม่จับภาพหรือตรวจจับ แยก Region ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"ความกว้างรวมที่จะตัดออก แบ่งเท่ากันสองข้าง: 0-1 เป็นสัดส่วน มากกว่า 1 เป็นพิกเซล ไม่เกินความกว้างทั้งหมด ค่าลบทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"พื้นที่กึ่งกลางที่มีความกว้างลดลง","example":"full = Region(100, 200, 1000, 500)\ncenter_lane = full.horizontal(0.5)\ncenter_lane_px = full.horizontal(300)","aliases":[],"group":"FLOW"},{"key":"class-region-method-vertical","kind":"METHOD","parentKey":"class-region","name":"vertical","signature":"region.vertical(value=0.5)","description":"ย่อแนวตั้งเข้าหากึ่งกลางโดยเลื่อนขอบทั้งด้านบนและด้านล่างเข้าด้านใน","behavior":"ย่อแนวตั้งเข้าหากึ่งกลางโดยเลื่อนขอบทั้งด้านบนและด้านล่างเข้าด้านใน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"สร้างหรือคำนวณพื้นที่หน้าจอโดยไม่จับภาพหรือตรวจจับ แยก Region ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"ความสูงรวมที่จะตัดออก แบ่งเท่ากันสองข้าง: 0-1 เป็นสัดส่วน มากกว่า 1 เป็นพิกเซล ไม่เกินความสูงทั้งหมด ค่าลบทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"บริเวณกึ่งกลางที่มีความสูงลดลง","example":"full = Region(100, 200, 1000, 500)\ncenter_band = full.vertical(0.5)\ncenter_band_px = full.vertical(200)","aliases":[],"group":"FLOW"},{"key":"class-region-method-middle","kind":"METHOD","parentKey":"class-region","name":"middle","signature":"region.middle(value=0.5)","description":"ย่อทั้งความกว้างและความสูงเข้าหากึ่งกลาง","behavior":"ย่อทั้งความกว้างและความสูงเข้าหากึ่งกลาง","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"สร้างหรือคำนวณพื้นที่หน้าจอโดยไม่จับภาพหรือตรวจจับ แยก Region ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"ขนาดที่จะตัดออกจากแต่ละมิติ: 0-1 เป็นสัดส่วนของมิตินั้น; มากกว่า 1 เป็นพิกเซล แบ่งเท่ากันระหว่างขอบตรงข้ามและไม่เกินขนาดแต่ละมิติ ค่าลบทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"บริเวณศูนย์กลางลดลงบนทั้งสองแกน","example":"full = Region(100, 200, 1000, 500)\nfocus = full.middle(0.4)\nfocus_px = full.middle(160)","aliases":[],"group":"FLOW"},{"key":"class-region-method-highlight","kind":"METHOD","parentKey":"class-region","name":"highlight","signature":"region.highlight(color=\"green\", line_width=2, auto_hide_ms=0, movable=False)","description":"วาดกรอบสี่เหลี่ยมรอบพื้นที่นี้ การเรียกซ้ำบน Region เดิมจะแทนที่กรอบเดิม เมธอดคืนค่าก่อนวาดเสร็จ และแสดงเฉพาะการอัปเดตล่าสุดก่อนรีเฟรชหน้าจอครั้งถัดไป","behavior":"วาดกรอบสี่เหลี่ยมรอบพื้นที่นี้ การเรียกซ้ำบน Region เดิมจะแทนที่กรอบเดิม เมธอดคืนค่าก่อนวาดเสร็จ และแสดงเฉพาะการอัปเดตล่าสุดก่อนรีเฟรชหน้าจอครั้งถัดไป","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"color","type":"Color | String | Number","defaultValue":"green","description":"Highlight color.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"line_width","type":"Number","defaultValue":"2","description":"ความหนากรอบเป็น dp; ค่าต่ำกว่า 1 จะเป็น 1","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"auto_hide_ms","type":"Number","defaultValue":"0","description":"Auto-hide after N milliseconds. 0 disables auto-hide.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"movable","type":"Boolean","defaultValue":"False","description":"Allow dragging the highlighted region and write the moved coordinates back into this Region.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"ส่งคืนขอบเขตเดียวกันหลังจากวาดไฮไลท์","example":"scan = Region(120, 260, 280, 160)\nscan.highlight(\"#FF00BCD4\", line_width=3, auto_hide_ms=1500, movable=True)","aliases":[],"group":"FLOW"},{"key":"class-region-method-highlight-off","kind":"METHOD","parentKey":"class-region","name":"highlight_off","signature":"region.highlight_off()","description":"ลบกรอบที่ Region นี้สร้าง","behavior":"ลบกรอบที่ Region นี้สร้าง","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Region","returnDescription":"ส่งคืนขอบเขตเดิมหลังจากปิดไฮไลต์","example":"scan = Region(120, 260, 280, 160)\nscan.highlight(\"green\")\nwait(1000)\nscan.highlight_off()","aliases":[],"group":"FLOW"},{"key":"class-template","kind":"CLASS","parentKey":null,"name":"Template","signature":"Template(name, /)","description":"ใช้ภาพที่บันทึกไว้เป็นเป้าหมายการจดจำ คุณย่อขยายหรือตัดภาพเป็น Template แยกต่างหาก แล้วบันทึกผลด้วย save_as() ได้","behavior":"ใช้ภาพที่บันทึกไว้เป็นเป้าหมายการจดจำ คุณย่อขยายหรือตัดภาพเป็น Template แยกต่างหาก แล้วบันทึกผลด้วย save_as() ได้","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["name"],"fieldDocs":[{"name":"name","type":"String?","defaultValue":null,"description":"ชื่อภาพแม่แบบหรือเส้นทางโฟลเดอร์แบบสัมพัทธ์ในมาโครปัจจุบัน; เป็น None สำหรับภาพที่ยังไม่มีชื่อ","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"name","type":"String","defaultValue":null,"description":"ภาพแม่แบบที่บันทึกในมาโครปัจจุบัน เช่น \"buttons/top/attack\" ชื่อว่าง ไม่พบ หรือระบุได้หลายภาพจะทำให้เกิดข้อผิดพลาด; คำสั่งนี้ไม่จับภาพใหม่","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"fieldExample":null,"constructorExample":"base = Template(\"enemy_head\")","params":[],"returnType":null,"returnDescription":null,"example":"base = Template(\"enemy_head\")\nvariant = base.scale(0.9).crop(Region(0, 0, 64, 64)).save_as(\"enemy_head_small\")","aliases":[],"group":null},{"key":"class-template-static-method-exists","kind":"STATIC_METHOD","parentKey":"class-template","name":"exists","signature":"Template.exists(name)","description":"ตรวจสอบว่ามีชื่อเทมเพลตอยู่ในมาโครปัจจุบันหรือไม่","behavior":"ตรวจสอบว่ามีชื่อเทมเพลตอยู่ในมาโครปัจจุบันหรือไม่","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"Template name or relative folder path to check.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"เป็นจริงหากมีเทมเพลตอยู่","example":"if Template.exists(\"enemy_head\"):\n    text(\"ready\")","aliases":[],"group":"FLOW"},{"key":"class-template-method-similarity","kind":"METHOD","parentKey":"class-template","name":"similarity","signature":"template.similarity(other)","description":"เปรียบเทียบรูปแบบส่วนสว่างและมืดโดยรวมของสองภาพ หากอ่านภาพไม่ได้หรือขนาดภาพต่างกันจะเกิดข้อผิดพลาด ไม่ใช้ค่าความโปร่งใสและอาจไม่ตรวจพบการเปลี่ยนสี ความสว่าง หรือรายละเอียดเล็กน้อย; 100 ไม่ได้แปลว่าทุกพิกเซลเหมือนกัน","behavior":"เปรียบเทียบรูปแบบส่วนสว่างและมืดโดยรวมของสองภาพ หากอ่านภาพไม่ได้หรือขนาดภาพต่างกันจะเกิดข้อผิดพลาด ไม่ใช้ค่าความโปร่งใสและอาจไม่ตรวจพบการเปลี่ยนสี ความสว่าง หรือรายละเอียดเล็กน้อย; 100 ไม่ได้แปลว่าทุกพิกเซลเหมือนกัน","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"Template","defaultValue":null,"description":"ต้องระบุเทมเพลตที่มีความกว้างและความสูงของภาพเท่ากัน","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Number","returnDescription":"ความคล้ายตั้งแต่ 0 ถึง 100 เพิ่มทีละ 1.5625; ค่าสูงหมายถึงรูปแบบส่วนสว่างและมืดคล้ายกันมากขึ้น","example":"# เปรียบเทียบเทมเพลตที่บันทึกไว้สองภาพที่มีขนาดเท่ากัน\nbefore = Template(\"before\")\nafter = Template(\"after\")\nscore = before.similarity(after)\nprint(score)","aliases":[],"group":"FLOW"},{"key":"class-template-method-exists","kind":"METHOD","parentKey":"class-template","name":"exists","signature":"template.exists()","description":"ตรวจว่าไฟล์ภาพของ Template นี้ยังอยู่หรือไม่ โดยไม่ได้ตรวจว่าภาพอ่านได้หรือไม่","behavior":"ตรวจว่าไฟล์ภาพของ Template นี้ยังอยู่หรือไม่ โดยไม่ได้ตรวจว่าภาพอ่านได้หรือไม่","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"เป็นจริงหากมีไฟล์เทมเพลตสำรองอยู่","example":"t = Template(\"enemy_head\")\nif t.exists():\n    text(\"ok\")","aliases":[],"group":"FLOW"},{"key":"class-template-method-scale","kind":"METHOD","parentKey":"class-template","name":"scale","signature":"template.scale(scale, scale_y=None)","description":"เปลี่ยนขนาดภาพแล้วคืน Template แยกต่างหากโดยไม่แก้ภาพต้นฉบับ ใช้ save_as() เพื่อบันทึกด้วยชื่อที่ต้องการ","behavior":"เปลี่ยนขนาดภาพแล้วคืน Template แยกต่างหากโดยไม่แก้ภาพต้นฉบับ ใช้ save_as() เพื่อบันทึกด้วยชื่อที่ต้องการ","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"scale","type":"Number","defaultValue":null,"description":"ตัวคูณความกว้าง: 1 คงเดิม, 0.5 ลดครึ่งหนึ่ง, 2 เพิ่มสองเท่า ค่าต่ำกว่า 0.01 จะใช้ 0.01 และใช้กับความสูงด้วยหากไม่ระบุ scale_y","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"scale_y","type":"Number","defaultValue":"scale","description":"ตัวคูณความสูง ขั้นต่ำ 0.01 ไม่ต้องระบุหากต้องการรักษาสัดส่วนเดิม","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Template","returnDescription":"วัตถุเทมเพลตที่ปรับขนาด","example":"t = Template(\"enemy_head\")\nsmall = t.scale(0.8)\nhit = Region(0, 0, 1080, 2400).find(small, 3000)","aliases":[],"group":"FLOW"},{"key":"class-template-method-crop","kind":"METHOD","parentKey":"class-template","name":"crop","signature":"template.crop(region)","description":"ตัดบางส่วนของภาพแล้วคืน Template แยกต่างหากโดยไม่แก้ภาพต้นฉบับ ใช้ save_as() เพื่อบันทึกด้วยชื่อที่ต้องการ","behavior":"ตัดบางส่วนของภาพแล้วคืน Template แยกต่างหากโดยไม่แก้ภาพต้นฉบับ ใช้ save_as() เพื่อบันทึกด้วยชื่อที่ต้องการ","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"region","type":"Region","defaultValue":null,"description":"สี่เหลี่ยมตัดภาพในหน่วยพิกเซลของภาพ วัดจากมุมซ้ายบนของภาพ ไม่ใช่หน้าจอ ตัดส่วนทศนิยมของพิกัดและจำกัดให้อยู่ในขอบภาพ","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Template","returnDescription":"ครอบตัดวัตถุเทมเพลต","example":"t = Template(\"enemy_head\")\nface = t.crop(Region(10, 10, 60, 60))","aliases":[],"group":"FLOW"},{"key":"class-template-method-save-as","kind":"METHOD","parentKey":"class-template","name":"save_as","signature":"template.save_as(name)","description":"บันทึกภาพในมาโครปัจจุบันแล้วคืน Template ที่บันทึก มาโครที่มีการป้องกันไม่สามารถบันทึกภาพแม่แบบได้; หากไม่มีไฟล์ต้นฉบับจะเกิดข้อผิดพลาด","behavior":"บันทึกภาพในมาโครปัจจุบันแล้วคืน Template ที่บันทึก มาโครที่มีการป้องกันไม่สามารถบันทึกภาพแม่แบบได้; หากไม่มีไฟล์ต้นฉบับจะเกิดข้อผิดพลาด","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"ชื่อที่ไม่ว่างหรือเส้นทางโฟลเดอร์แบบสัมพัทธ์ เช่น \"buttons/top/attack\" ภาพเดิมที่เส้นทางนั้นจะถูกแทนที่","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Template","returnDescription":"บันทึกวัตถุเทมเพลตที่มีชื่อแล้ว","example":"captured = Region(200, 300, 120, 90).capture()\nsaved = captured.save_as(\"buttons/top/enemy_slot\")\nif saved.exists():\n    text(\"saved\")","aliases":[],"group":"FLOW"},{"key":"class-recognition","kind":"READ_ONLY_CLASS","parentKey":null,"name":"Recognition","signature":"Recognition","description":"ใช้ในสาขาความสำเร็จในการจดจำใน UI Recognition.result ส่งคืนการจับคู่สำหรับหนึ่งเป้าหมายการรับรู้หรือ MatchList เมื่อหลายเป้าหมายตรงกัน","behavior":"ใช้ในสาขาความสำเร็จในการจดจำใน UI Recognition.result ส่งคืนการจับคู่สำหรับหนึ่งเป้าหมายการรับรู้หรือ MatchList เมื่อหลายเป้าหมายตรงกัน","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":false,"fields":["result"],"fieldDocs":[{"name":"result","type":"Match | MatchList","defaultValue":null,"description":"The active recognition result for this Success branch.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":"current = Recognition.result\nif current.found:\n    click(current, random=0)","constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# Recognition ใช้ได้เฉพาะใน Python ของกิ่งสำเร็จการรับรู้เท่านั้น\na = Recognition.result\nif a.found:\n    a.highlight(color=\"yellow\", auto_hide_ms=800)","aliases":[],"group":null},{"key":"class-match","kind":"READ_ONLY_CLASS","parentKey":null,"name":"Match","signature":"Match","description":"อ่านผลการค้นหาด้วยการจดจำ ตรวจ found ก่อนแตะหรือใช้ตำแหน่ง เพราะการค้นหาภาพที่ไม่สำเร็จอาจยังมีตำแหน่งของภาพที่ใกล้เคียงที่สุด","behavior":"อ่านผลการค้นหาด้วยการจดจำ ตรวจ found ก่อนแตะหรือใช้ตำแหน่ง เพราะการค้นหาภาพที่ไม่สำเร็จอาจยังมีตำแหน่งของภาพที่ใกล้เคียงที่สุด","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":false,"fields":["name","found","confidence","conf","point","bounds","region","inference_info"],"fieldDocs":[{"name":"name","type":"String?","defaultValue":null,"description":"Matched target name. Template matches use the template name without extension, OCR uses the matched target text, and color matches use Color.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"found","type":"Boolean","defaultValue":null,"description":"Whether a match was found.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"confidence","type":"Number","defaultValue":null,"description":"Confidence score from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"conf","type":"Number","defaultValue":null,"description":"ชื่อแทนของ confidence ซึ่งคืนค่าคะแนนเดียวกันตั้งแต่ 0.0 ถึง 1.0","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"point","type":"Point? | list[Point]","defaultValue":null,"description":"ตำแหน่งผลลัพธ์: Point, ลิสต์ของ Point หรือ None การค้นหาสีคืนลิสต์ที่อาจว่าง ตรวจ found และรูปแบบค่าก่อนอ่านพิกัดหรือเข้าถึงสมาชิกในลิสต์","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"bounds","type":"Region?","defaultValue":null,"description":"สี่เหลี่ยมรอบผลลัพธ์ หรือ None หากไม่มี การค้นหาภาพที่ไม่สำเร็จอาจยังคืนกรอบของภาพที่ใกล้เคียงที่สุด; ตรวจ found ก่อน","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"region","type":"Region?","defaultValue":null,"description":"ชื่อแทนของ bounds ซึ่งคืนค่า Region ที่ตรงกันเดียวกันหรือ None","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"inference_info","type":"dict?","defaultValue":null,"description":"รายละเอียดเพิ่มเติมของผล หรือ None ผลโมเดลอาจมี class_id, class_name, ฟิลด์เวลาที่ลงท้ายด้วย _ms (มิลลิวินาที) และ input_width/input_height (พิกเซล) ผลสีอาจมี target_color, sampled_color, max_channel_delta, match_count และ matches คีย์ต่างกันตามการค้นหา; ตรวจว่ามีคีย์ก่อนอ่าน","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":"# อ่านรายละเอียดที่อาจไม่มีและจุดสีอย่างปลอดภัย\nm = Region(100, 200, 300, 400).find(\"btn\", 3000)\ntarget_name = m.name\nis_found = m.found\nscore = m.confidence\nshort_score = m.conf\ncenter = m.point\nbox = m.bounds\nsame_box = m.region\ninfo = m.inference_info\nif info is not None:\n    info_class_id = info.get(\"class_id\")\n    info_class_name = info.get(\"class_name\")\n\ncolor_hit = Region(0, 0, 1080, 1920).find_color(\"#FFFFFF\", tolerance=4)\ncolor_name = color_hit.name\nif color_hit.found and color_hit.point:\n    first_color_point = color_hit.point[0]\n\n# ในกิ่งสำเร็จการรับรู้:\ncurrent = Recognition.result\nif current.found:\n    text(current.name)\n    current.highlight(color=\"yellow\", auto_hide_ms=800)","constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"m = Region(100, 200, 300, 400).find(\"btn\", 3000)\nif m.found:\n    click(m)\n    conf = m.confidence\n\n# Recognition.result ใช้ได้เฉพาะใน Python ของกิ่งสำเร็จการรับรู้เท่านั้น\nif Recognition.result.found:\n    click(Recognition.result, random=0)","aliases":[],"group":null},{"key":"class-match-method-highlight","kind":"METHOD","parentKey":"class-match","name":"highlight","signature":"match.highlight(color=\"green\", line_width=2, region_width=36, auto_hide_ms=0)","description":"ทำเครื่องหมายผลที่พบบนหน้าจอ วาด bounds ถ้ามี มิฉะนั้นวาดสี่เหลี่ยมรอบแต่ละจุด ไม่วาดเมื่อ found=false การวาดถูกจัดไว้ในคิว จึงอาจคืนค่าก่อนกรอบปรากฏ สำหรับวัตถุเดียวกัน จะวาดเฉพาะการอัปเดตล่าสุดที่รออยู่ในเฟรมหน้าจอถัดไป","behavior":"ทำเครื่องหมายผลที่พบบนหน้าจอ วาด bounds ถ้ามี มิฉะนั้นวาดสี่เหลี่ยมรอบแต่ละจุด ไม่วาดเมื่อ found=false การวาดถูกจัดไว้ในคิว จึงอาจคืนค่าก่อนกรอบปรากฏ สำหรับวัตถุเดียวกัน จะวาดเฉพาะการอัปเดตล่าสุดที่รออยู่ในเฟรมหน้าจอถัดไป","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"color","type":"Color | String | Number","defaultValue":"green","description":"Highlight color.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"line_width","type":"Number","defaultValue":"2","description":"ความหนาเส้นขอบเป็นพิกเซล ขั้นต่ำ 1","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"region_width","type":"Number","defaultValue":"36","description":"ความกว้างสี่เหลี่ยมเป็นพิกเซลเมื่อมีเพียงจุด ขั้นต่ำ 1","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"auto_hide_ms","type":"Number","defaultValue":"0","description":"เวลาก่อนซ่อนเป็นมิลลิวินาที ค่า 0 หรือค่าติดลบจะแสดงกรอบต่อไปจนเรียก highlight_off()","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Match เดิม เพื่อให้เรียกเมธอดต่อได้","example":"m = Region(100, 200, 300, 400).find(\"start\", 3000)\nm.highlight(color=\"yellow\", line_width=3, auto_hide_ms=1200)","aliases":[],"group":"FLOW"},{"key":"class-match-method-highlight-off","kind":"METHOD","parentKey":"class-match","name":"highlight_off","signature":"match.highlight_off()","description":"ปิดไฮไลต์ที่ใช้งานอยู่ซึ่งสร้างจากอินสแตนซ์การจับคู่นี้","behavior":"ปิดไฮไลต์ที่ใช้งานอยู่ซึ่งสร้างจากอินสแตนซ์การจับคู่นี้","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Match","returnDescription":"คืนค่าการจับคู่เดิมหลังจากปิดไฮไลต์","example":"m = Region(100, 200, 300, 400).find(\"start\", 3000)\nm.highlight()\nm.highlight_off()","aliases":[],"group":"FLOW"},{"key":"class-matchlist","kind":"READ_ONLY_CLASS","parentKey":null,"name":"MatchList","signature":"MatchList","description":"อ่านผลการจดจำหลายรายการเป็นลิสต์ของ Match ใช้ len(matches), matches[index] หรือลูป for ลิสต์ที่ไม่ว่างอาจมีรายการที่ไม่พบ โดยเฉพาะหลัง wait_any()/wait_all(); ตรวจ found ของแต่ละรายการ","behavior":"อ่านผลการจดจำหลายรายการเป็นลิสต์ของ Match ใช้ len(matches), matches[index] หรือลูป for ลิสต์ที่ไม่ว่างอาจมีรายการที่ไม่พบ โดยเฉพาะหลัง wait_any()/wait_all(); ตรวจ found ของแต่ละรายการ","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":false,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"hits = Region(100, 200, 300, 400).find_all([\"hp\", \"mp\"], 5000)\nif hits:\n    click(hits, offset=(0, 4), random=0)","aliases":[],"group":null},{"key":"class-matchlist-method-unique","kind":"METHOD","parentKey":"class-matchlist","name":"unique","signature":"matches.unique(iou_threshold=0.5)","description":"คืน MatchList ใหม่โดยตัดผลตรวจจับซ้ำแยกตามชื่อแบบ greedy เมื่อ IoU เกินเกณฑ์ ผลที่พบและมีพื้นที่ bounds เป็นบวกประมวลผลตาม confidence จากมากไปน้อย โดยคงลำดับเมื่อเท่ากัน ผลที่ไม่พบ ไม่มี bounds หรือมีพื้นที่ไม่เป็นบวกจะอยู่ท้ายตามลำดับเดิมโดยไม่ถูกตัด bounds หรือ confidence ที่ใช้และไม่เป็นจำนวนจำกัดทำให้เกิดข้อผิดพลาด โดยคงออบเจ็กต์ Match และ metadata เดิมไว้โดยไม่แก้ไข","behavior":"คืน MatchList ใหม่โดยตัดผลตรวจจับซ้ำแยกตามชื่อแบบ greedy เมื่อ IoU เกินเกณฑ์ ผลที่พบและมีพื้นที่ bounds เป็นบวกประมวลผลตาม confidence จากมากไปน้อย โดยคงลำดับเมื่อเท่ากัน ผลที่ไม่พบ ไม่มี bounds หรือมีพื้นที่ไม่เป็นบวกจะอยู่ท้ายตามลำดับเดิมโดยไม่ถูกตัด bounds หรือ confidence ที่ใช้และไม่เป็นจำนวนจำกัดทำให้เกิดข้อผิดพลาด โดยคงออบเจ็กต์ Match และ metadata เดิมไว้โดยไม่แก้ไข","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณจากค่าที่เก็บไว้โดยไม่จับภาพหน้าจอ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iou_threshold","type":"Number","defaultValue":"0.5","description":"เกณฑ์ IoU ที่เป็นจำนวนจำกัดตั้งแต่ 0 ถึง 1 รวมปลายทั้งสอง","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"ผลที่พบและมี bounds ต้องมีพิกัดและขอบที่คำนวณได้เป็นจำนวนจำกัด แม้พื้นที่จะไม่เป็นบวก","example":"# ลบผลตรวจจับชื่อเดียวกันที่ซ้อนทับ\nhits = Region.full_screen().find_all([\"enemy\", \"enemy\"], 1000)\nfiltered = hits.unique(iou_threshold=0.5)","aliases":[],"group":"FLOW"},{"key":"class-matchlist-method-highlight","kind":"METHOD","parentKey":"class-matchlist","name":"highlight","signature":"matches.highlight(color=\"green\", line_width=2, region_width=36, auto_hide_ms=0)","description":"ทำเครื่องหมายผลที่พบแต่ละรายการบนหน้าจอ โดยใช้ bounds หรือสี่เหลี่ยมรอบจุดต่างๆ ข้ามผลที่ไม่มีตำแหน่ง การวาดถูกจัดไว้ในคิว จึงอาจคืนค่าก่อนกรอบปรากฏ สำหรับวัตถุเดียวกัน จะวาดเฉพาะการอัปเดตล่าสุดที่รออยู่ในเฟรมหน้าจอถัดไป","behavior":"ทำเครื่องหมายผลที่พบแต่ละรายการบนหน้าจอ โดยใช้ bounds หรือสี่เหลี่ยมรอบจุดต่างๆ ข้ามผลที่ไม่มีตำแหน่ง การวาดถูกจัดไว้ในคิว จึงอาจคืนค่าก่อนกรอบปรากฏ สำหรับวัตถุเดียวกัน จะวาดเฉพาะการอัปเดตล่าสุดที่รออยู่ในเฟรมหน้าจอถัดไป","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"color","type":"Color | String | Number","defaultValue":"green","description":"Highlight color.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"line_width","type":"Number","defaultValue":"2","description":"ความหนาเส้นขอบเป็นพิกเซล ขั้นต่ำ 1","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"region_width","type":"Number","defaultValue":"36","description":"ความกว้างสี่เหลี่ยมเป็นพิกเซลเมื่อมีเพียงจุด ขั้นต่ำ 1","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"auto_hide_ms","type":"Number","defaultValue":"0","description":"เวลาก่อนซ่อนเป็นมิลลิวินาที ค่า 0 หรือค่าติดลบจะแสดงกรอบต่อไปจนเรียก highlight_off()","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"MatchList เดิม เพื่อให้เรียกเมธอดต่อได้","example":"hits = Region(100, 200, 300, 400).find_any([\"enemy_a\", \"enemy_b\"], 2500)\nhits.highlight(color=\"yellow\", line_width=3, auto_hide_ms=1200)","aliases":[],"group":"FLOW"},{"key":"class-matchlist-method-highlight-off","kind":"METHOD","parentKey":"class-matchlist","name":"highlight_off","signature":"matches.highlight_off()","description":"ปิดไฮไลท์ที่ใช้งานอยู่ทั้งหมดที่สร้างจากอินสแตนซ์รายการการแข่งขันนี้","behavior":"ปิดไฮไลท์ที่ใช้งานอยู่ทั้งหมดที่สร้างจากอินสแตนซ์รายการการแข่งขันนี้","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"MatchList","returnDescription":"ส่งคืนรายการการแข่งขันเดียวกันหลังจากปิดไฮไลต์","example":"hits = Region(100, 200, 300, 400).find_any([\"enemy_a\", \"enemy_b\"], 2500)\nhits.highlight()\nhits.highlight_off()","aliases":[],"group":"FLOW"},{"key":"class-color","kind":"CLASS","parentKey":null,"name":"Color","signature":"Color(value, /)","description":"เก็บสี อ่านสีจากหน้าจอ หรือเปรียบเทียบสี ARGB ประกอบด้วยความทึบ (A), แดง (R), เขียว (G) และน้ำเงิน (B); compare(), distance_rgb() และ delta_e() ไม่ใช้ค่าความทึบ","behavior":"เก็บสี อ่านสีจากหน้าจอ หรือเปรียบเทียบสี ARGB ประกอบด้วยความทึบ (A), แดง (R), เขียว (G) และน้ำเงิน (B); compare(), distance_rgb() และ delta_e() ไม่ใช้ค่าความทึบ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["argb","a","r","g","b","hex"],"fieldDocs":[{"name":"argb","type":"Number","defaultValue":null,"description":"Raw ARGB integer value.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"a","type":"Int","defaultValue":null,"description":"ความทึบตั้งแต่ 0 (โปร่งใส) ถึง 255 (ทึบทั้งหมด)","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"r","type":"Int","defaultValue":null,"description":"Red channel 0-255.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"g","type":"Int","defaultValue":null,"description":"Green channel 0-255.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"b","type":"Int","defaultValue":null,"description":"Blue channel 0-255.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"hex","type":"String","defaultValue":null,"description":"Hex string `#AARRGGBB`.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"value","type":"String | Number","defaultValue":null,"description":"Hex string (`#AARRGGBB`/`#RRGGBB`) or raw ARGB number.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"fieldExample":null,"constructorExample":"c1 = Color(\"#FFFFFFFF\")\nc2 = Color(4294967295)","params":[],"returnType":null,"returnDescription":null,"example":"cursor = Point(540, 920)\npicked = Color.get(cursor)\nif picked == \"#FFFFFFFF\":\n    click(cursor, random=6)","aliases":[],"group":null},{"key":"class-color-static-method-get","kind":"STATIC_METHOD","parentKey":"class-color","name":"get","signature":"Color.get(target, interval=3, default=\"#00000000\")","description":"อ่านสีหน้าจอหนึ่งครั้ง: Point คืน Color เดียว, Region คืนสีเป็นแถว และ list[Point] คืนลิสต์ Color ตามลำดับเดิม ทุกจุดใช้ภาพหน้าจอเดียวกัน หากจับหน้าจอไม่ได้หรือขาดตัวอย่างสีจะคืน default โดยไม่ลองซ้ำ; เลือก default ที่แยกจากสีเป้าหมายได้","behavior":"อ่านสีหน้าจอหนึ่งครั้ง: Point คืน Color เดียว, Region คืนสีเป็นแถว และ list[Point] คืนลิสต์ Color ตามลำดับเดิม ทุกจุดใช้ภาพหน้าจอเดียวกัน หากจับหน้าจอไม่ได้หรือขาดตัวอย่างสีจะคืน default โดยไม่ลองซ้ำ; เลือก default ที่แยกจากสีเป้าหมายได้","execution":{"blocking":"yes","threadSafety":"serialized","parallel":"conditional","details":"รอจับภาพและอ่านสี ทุกโฟลว์ใช้การตั้งค่าจับภาพและใช้ภาพเดิมร่วมกัน"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"target","type":"Point | Region | list[Point]","defaultValue":null,"description":"Sampling target.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"interval","type":"Number","defaultValue":"3","description":"ระยะระหว่างจุดอ่านสีตามหน่วยพิกัดของ Region; ค่าต่ำกว่า 1 จะใช้ 1 ค่าน้อยให้สีมากขึ้น ไม่ใช้กับ Point และ list[Point]","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"default","type":"Color | String | Number","defaultValue":"#00000000","description":"Fallback color returned when screen capture or pixel sampling is unavailable.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Color | list[list[Color]] | list[Color]","returnDescription":"สีตามโครงสร้างของ target โดยแทนตัวอย่างที่อ่านไม่ได้ด้วย default สำหรับ Region อ่าน grid[row][column] จากบนลงล่างและซ้ายไปขวา ลิสต์จุดว่างคืนลิสต์ว่าง","example":"c = Color.get(Point(100, 200), default=\"#FF000000\")\ngrid = Color.get(Region(120, 240, 90, 60), interval=3, default=\"#00000000\")\nbatch = Color.get([Point(10, 10), Point(20, 20)])","aliases":[],"group":"FLOW"},{"key":"class-color-static-method-compare","kind":"STATIC_METHOD","parentKey":"class-color","name":"compare","signature":"Color.compare(a, b, tolerance=0)","description":"เปรียบเทียบสองสีด้วยค่าความคลาดเคลื่อน RGB ต่อช่องสัญญาณ การแข่งขันจะผ่านเมื่อ |R1-R2|, |G1-G2| และ |B1-B2| เท่านั้น มีทั้งหมด <= ความอดทน","behavior":"เปรียบเทียบสองสีด้วยค่าความคลาดเคลื่อน RGB ต่อช่องสัญญาณ การแข่งขันจะผ่านเมื่อ |R1-R2|, |G1-G2| และ |B1-B2| เท่านั้น มีทั้งหมด <= ความอดทน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"a","type":"Color | String | Number","defaultValue":null,"description":"First color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"b","type":"Color | String | Number","defaultValue":null,"description":"Second color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"tolerance","type":"Number","defaultValue":"0","description":"ความต่างสูงสุดที่ยอมรับต่อช่อง RGB ค่า 0 ต้องเท่ากันทุกช่อง; 255 ยอมรับทุกสี RGB ค่าติดลบใช้ 0 ค่อยๆ เพิ่มตามตัวอย่างสีจากหน้าจอจริง","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"true เมื่อทั้งสามช่อง RGB ต่างกันไม่เกิน tolerance; มิฉะนั้นเป็น false","example":"base = Color(\"#FF4CAF50\")\nsample = Color.get(Point(620, 340))\nis_same = Color.compare(base, sample, tolerance=8)  # เฉด UI ที่ใกล้เคียงกัน","aliases":[],"group":"FLOW"},{"key":"class-color-static-method-distance-rgb","kind":"STATIC_METHOD","parentKey":"class-color","name":"distance_rgb","signature":"Color.distance_rgb(a, b)","description":"วัดความต่างรวมของช่องแดง เขียว และน้ำเงินระหว่างสองสี ค่าน้อยหมายถึงค่า RGB ใกล้กันมากขึ้น; ไม่ใช้ค่าความโปร่งใส","behavior":"วัดความต่างรวมของช่องแดง เขียว และน้ำเงินระหว่างสองสี ค่าน้อยหมายถึงค่า RGB ใกล้กันมากขึ้น; ไม่ใช้ค่าความโปร่งใส","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"a","type":"Color | String | Number","defaultValue":null,"description":"First color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"b","type":"Color | String | Number","defaultValue":null,"description":"Second color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Number","returnDescription":"ระยะห่างตั้งแต่ 0 ถึงประมาณ 441.67; 0 หมายถึงช่อง RGB เหมือนกัน เลือกเกณฑ์ด้วยตัวอย่างสีจากหน้าจอของคุณ","example":"actual = Color.get(Point(620, 340))\nrgb_gap = Color.distance_rgb(\"#FF4CAF50\", actual)\nif rgb_gap <= 15:\n    print(\"close in RGB\")","aliases":[],"group":"FLOW"},{"key":"class-color-static-method-delta-e","kind":"STATIC_METHOD","parentKey":"class-color","name":"delta_e","signature":"Color.delta_e(a, b)","description":"ประมาณความต่างของสีที่มองเห็นด้วย CIE76 Delta E ซึ่งเป็นวิธีวัดความต่างของสี ค่าน้อยหมายถึงสีคล้ายกันมากขึ้น; ไม่ใช้ค่าความโปร่งใส","behavior":"ประมาณความต่างของสีที่มองเห็นด้วย CIE76 Delta E ซึ่งเป็นวิธีวัดความต่างของสี ค่าน้อยหมายถึงสีคล้ายกันมากขึ้น; ไม่ใช้ค่าความโปร่งใส","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"a","type":"Color | String | Number","defaultValue":null,"description":"First color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"b","type":"Color | String | Number","defaultValue":null,"description":"Second color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Number","returnDescription":"คะแนนความต่างที่ไม่ติดลบ; 0 หมายถึงช่อง RGB เหมือนกัน ทดสอบเกณฑ์กับหน้าจอของคุณเอง เพราะความคล้ายที่มองเห็นอาจต่างกัน","example":"actual = Color.get(Point(620, 340))\nd = Color.delta_e(\"#FF4CAF50\", actual)\nif d <= 3:\n    print(\"looks similar to human eye\")","aliases":[],"group":"FLOW"},{"key":"class-color-method-in-range","kind":"METHOD","parentKey":"class-color","name":"in_range","signature":"color.in_range(min_color, max_color)","description":"ตรวจสอบว่าแต่ละช่อง RGB อยู่ในช่วงรวมขอบเขต โดยไม่สน alpha หากขอบล่างมากกว่าขอบบนในช่องใดจะเกิดข้อผิดพลาด","behavior":"ตรวจสอบว่าแต่ละช่อง RGB อยู่ในช่วงรวมขอบเขต โดยไม่สน alpha หากขอบล่างมากกว่าขอบบนในช่องใดจะเกิดข้อผิดพลาด","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"min_color","type":"Color | String | Number","defaultValue":null,"description":"ขอบเขตสีล่าง","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"max_color","type":"Color | String | Number","defaultValue":null,"description":"ขอบเขตสีบน","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":null,"example":"# ตรวจสอบว่าสีอยู่ในช่วง RGB หรือไม่\nprint(Color(\"#808080\").in_range(\"#606060\", \"#A0A0A0\"))","aliases":[],"group":"FLOW"},{"key":"class-color-method-is-gray","kind":"METHOD","parentKey":"class-color","name":"is_gray","signature":"color.is_gray(spread=15)","description":"ตรวจสอบว่า max(R, G, B) - min(R, G, B) ไม่เกิน spread โดยไม่สน alpha","behavior":"ตรวจสอบว่า max(R, G, B) - min(R, G, B) ไม่เกิน spread โดยไม่สน alpha","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"spread","type":"Int","defaultValue":"15","description":"จำนวนเต็มจำกัดตั้งแต่ 0 ถึง 255 รวมปลายทั้งสอง","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":null,"example":"# ตรวจสอบว่าสีเกือบเป็นสีเทาหรือไม่\nprint(Color(\"#808080\").is_gray())","aliases":[],"group":"FLOW"},{"key":"class-color-method-compare","kind":"METHOD","parentKey":"class-color","name":"compare","signature":"color.compare(other, tolerance=0)","description":"ตรวจว่าสีนี้ใกล้กับอีกสีหรือไม่ ความต่างของแต่ละช่อง RGB ต้องไม่เกิน tolerance; ไม่ใช้ค่าความโปร่งใส","behavior":"ตรวจว่าสีนี้ใกล้กับอีกสีหรือไม่ ความต่างของแต่ละช่อง RGB ต้องไม่เกิน tolerance; ไม่ใช้ค่าความโปร่งใส","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"Color | String | Number","defaultValue":null,"description":"Color to compare.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"tolerance","type":"Number","defaultValue":"0","description":"ความต่างสูงสุดที่ยอมรับต่อช่อง RGB ค่า 0 ต้องเท่ากันทุกช่อง; 255 ยอมรับทุกสี RGB ค่าติดลบใช้ 0 ค่อยๆ เพิ่มตามตัวอย่างสีจากหน้าจอจริง","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"true เมื่อทั้งสามช่อง RGB ต่างกันไม่เกิน tolerance; มิฉะนั้นเป็น false","example":"picked = Color.get(Point(540, 920))\nif picked.compare(\"#FFFFFFFF\", tolerance=5):\n    click(Point(540, 920))","aliases":[],"group":"FLOW"},{"key":"class-color-method-distance-rgb","kind":"METHOD","parentKey":"class-color","name":"distance_rgb","signature":"color.distance_rgb(other)","description":"วัดความต่าง RGB รวมระหว่างสีนี้กับอีกสี โดยไม่ใช้ค่าความโปร่งใส","behavior":"วัดความต่าง RGB รวมระหว่างสีนี้กับอีกสี โดยไม่ใช้ค่าความโปร่งใส","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"Color | String | Number","defaultValue":null,"description":"Color to compare.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Number","returnDescription":"ระยะห่างตั้งแต่ 0 ถึงประมาณ 441.67; 0 หมายถึงช่อง RGB เหมือนกัน เลือกเกณฑ์ด้วยตัวอย่างสีจากหน้าจอของคุณ","example":"base = Color(\"#FF4CAF50\")\nactual = Color.get(Point(620, 340))\nrgb_gap = base.distance_rgb(actual)\nif rgb_gap <= 20:\n    print(\"close enough in RGB\")","aliases":[],"group":"FLOW"},{"key":"class-color-method-delta-e","kind":"METHOD","parentKey":"class-color","name":"delta_e","signature":"color.delta_e(other)","description":"ประมาณความต่างที่มองเห็นระหว่างสีนี้กับอีกสีด้วย CIE76 Delta E โดยไม่ใช้ค่าความโปร่งใส","behavior":"ประมาณความต่างที่มองเห็นระหว่างสีนี้กับอีกสีด้วย CIE76 Delta E โดยไม่ใช้ค่าความโปร่งใส","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"Color | String | Number","defaultValue":null,"description":"Color to compare.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Number","returnDescription":"คะแนนความต่างที่ไม่ติดลบ; 0 หมายถึงช่อง RGB เหมือนกัน ทดสอบเกณฑ์กับหน้าจอของคุณเอง เพราะความคล้ายที่มองเห็นอาจต่างกัน","example":"base = Color(\"#FF4CAF50\")\nactual = Color.get(Point(620, 340))\nperceptual_gap = base.delta_e(actual)\nif perceptual_gap <= 2:\n    print(\"looks almost the same\")","aliases":[],"group":"FLOW"},{"key":"class-overlaytext","kind":"CLASS","parentKey":null,"name":"OverlayText","signature":"OverlayText(text=\"\", position=(0, 0), color=\"#FFFFFFFF\", size=16, background=None)","description":"สร้างข้อความลอยเหนือแอปอื่น เรียก show() เพื่อแสดงและใช้การเปลี่ยนแปลงภายหลัง ใช้ track() เพื่อติดตามการกด ลาก หรือกดค้าง อ่านค่าปัจจุบันด้วย state(); text() และ background() เป็นเมธอด","behavior":"สร้างข้อความลอยเหนือแอปอื่น เรียก show() เพื่อแสดงและใช้การเปลี่ยนแปลงภายหลัง ใช้ track() เพื่อติดตามการกด ลาก หรือกดค้าง อ่านค่าปัจจุบันด้วย state(); text() และ background() เป็นเมธอด","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() ลบเฉพาะข้อความลอยของโฟลว์ปัจจุบัน การอัปเดตอาจต้องรอ สร้างและแก้แต่ละ OverlayText ในโฟลว์เดียว"},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":true,"fields":["x","y","scale","anchor","argb","size_sp"],"fieldDocs":[{"name":"x","type":"Number","defaultValue":"0","description":"Top-left X position in pixels. Writable before show().","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"y","type":"Number","defaultValue":"0","description":"Top-left Y position in pixels. Writable before show().","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"scale","type":"String","defaultValue":"fixed","description":"Coordinate scale copied from Point positions.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"anchor","type":"String","defaultValue":"none","description":"Coordinate anchor copied from Point positions.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"argb","type":"Color","defaultValue":"white","description":"Text color. Assign with Color/string/number values. Use overlay.color(value) for method chaining.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"size_sp","type":"Number","defaultValue":"16","description":"Text size in sp. Use overlay.size(sp) for method chaining.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"text","type":"String","defaultValue":"\"\"","description":"เนื้อหาข้อความ แท็ก <b>...</b> ที่เปิดและปิดครบทำให้เฉพาะข้อความด้านในเป็นตัวหนาได้หลายบรรทัด แท็กและรหัสอักขระอื่นแสดงตามต้นฉบับ หากแท็กตัวหนาไม่ครบหรือเกิน จะแสดงข้อความทั้งหมดตามต้นฉบับ state()[\"text\"] คืนข้อความต้นฉบับ","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"position","type":"Point | tuple[Number, Number]","defaultValue":"(0, 0)","description":"Initial position as Point or tuple/list (x, y). Point carries scale/anchor metadata.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"color","type":"Color | String | Number","defaultValue":"white","description":"Initial text color.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"size","type":"Number","defaultValue":"16","description":"Initial text size (sp).","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"background","type":"Color | String | Number | None","defaultValue":"None","description":"Initial background color. None means transparent/no background.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"fieldExample":null,"constructorExample":"badge = OverlayText(\"<b>Status:</b> Ready\", Point(420, 220, scale=\"width\", anchor=\"top\"), background=None)\nbadge.show()","params":[],"returnType":null,"returnDescription":null,"example":"badge = OverlayText(\"Running...\", Point(320, 160, scale=\"width\", anchor=\"top\"), background=None)\nbadge.color(\"#FF00E676\").background(\"#66000000\").size(18).track(press=True, move=True, hold=True, hold_ms=700)\nbadge.show()\n\nstate = badge.state()\nif state[\"status\"] == 2:\n    MacroPanel.notify(\"Badge is moving\")\n\np = badge.get_point()\nr = badge.get_region()\nif r is not None:\n    r.highlight(\"yellow\", auto_hide_ms=600)\n\nbadge.hide()   # ซ่อนอย่างรวดเร็ว\nbadge.show()   # แสดงอีกครั้งอย่างรวดเร็ว\nbadge.off()    # ปล่อยทั้งหมด","aliases":[],"group":null},{"key":"class-overlaytext-static-method-off-all","kind":"STATIC_METHOD","parentKey":"class-overlaytext","name":"off_all","signature":"OverlayText.off_all()","description":"ปิดและคืนทรัพยากรข้อความซ้อนทับทั้งหมดที่โฟลว์ปัจจุบันสร้าง โดยไม่กระทบโฟลว์ที่ทำงานขนานกัน","behavior":"ปิดและคืนทรัพยากรข้อความซ้อนทับทั้งหมดที่โฟลว์ปัจจุบันสร้าง โดยไม่กระทบโฟลว์ที่ทำงานขนานกัน","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() ลบเฉพาะข้อความลอยของโฟลว์ปัจจุบัน การอัปเดตอาจต้องรอ สร้างและแก้แต่ละ OverlayText ในโฟลว์เดียว"},"limitations":[],"relatedApis":["class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"ไม่มีค่าส่งคืน","example":"# ปล่อยโอเวอร์เลย์ที่เป็นของโฟลว์นี้\na = OverlayText(\"Running\", (24, 120))\na.show()\nOverlayText.off_all()","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-text","kind":"METHOD","parentKey":"class-overlaytext","name":"text","signature":"overlay.text(value)","description":"ตั้งค่าเนื้อหาข้อความ เรียก show() เพื่ออัปเดตข้อความบนหน้าจอ.","behavior":"ตั้งค่าเนื้อหาข้อความ เรียก show() เพื่ออัปเดตข้อความบนหน้าจอ.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() ลบเฉพาะข้อความลอยของโฟลว์ปัจจุบัน การอัปเดตอาจต้องรอ สร้างและแก้แต่ละ OverlayText ในโฟลว์เดียว"},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"String","defaultValue":null,"description":"เนื้อหาข้อความ แท็ก <b>...</b> ที่เปิดและปิดครบทำให้เฉพาะข้อความด้านในเป็นตัวหนาได้หลายบรรทัด แท็กและรหัสอักขระอื่นแสดงตามต้นฉบับ หากแท็กตัวหนาไม่ครบหรือเกิน จะแสดงข้อความทั้งหมดตามต้นฉบับ state()[\"text\"] คืนข้อความต้นฉบับ","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"คืน overlay เดิมเพื่อเรียกเมธอดถัดไปได้","example":"# ตั้งค่าหรือตรวจสอบโอเวอร์เลย์ของโฟลว์นี้\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.show()\nbadge.text(\"Running\")\nbadge.show()","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-color","kind":"METHOD","parentKey":"class-overlaytext","name":"color","signature":"overlay.color(value)","description":"อัปเดตสีข้อความ","behavior":"อัปเดตสีข้อความ","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() ลบเฉพาะข้อความลอยของโฟลว์ปัจจุบัน การอัปเดตอาจต้องรอ สร้างและแก้แต่ละ OverlayText ในโฟลว์เดียว"},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Color | String | Number","defaultValue":null,"description":"Color value.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"คืน overlay เดิมเพื่อเรียกเมธอดถัดไปได้","example":"# ตั้งค่าหรือตรวจสอบโอเวอร์เลย์ของโฟลว์นี้\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.color(\"#FF00E676\")\nbadge.show()","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-background","kind":"METHOD","parentKey":"class-overlaytext","name":"background","signature":"overlay.background(value=None)","description":"อัพเดตสีพื้นหลัง การผ่านไม่มีจะลบพื้นหลัง","behavior":"อัพเดตสีพื้นหลัง การผ่านไม่มีจะลบพื้นหลัง","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() ลบเฉพาะข้อความลอยของโฟลว์ปัจจุบัน การอัปเดตอาจต้องรอ สร้างและแก้แต่ละ OverlayText ในโฟลว์เดียว"},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Color | String | Number | None","defaultValue":"None","description":"Background color, or None for transparent/no background.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"คืน overlay เดิมเพื่อเรียกเมธอดถัดไปได้","example":"# ตั้งค่าหรือตรวจสอบโอเวอร์เลย์ของโฟลว์นี้\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.background(\"#66000000\")\nbadge.show()\nbadge.background(None)\nbadge.show()","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-size","kind":"METHOD","parentKey":"class-overlaytext","name":"size","signature":"overlay.size(sp)","description":"อัปเดตขนาดตัวอักษร (sp)","behavior":"อัปเดตขนาดตัวอักษร (sp)","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() ลบเฉพาะข้อความลอยของโฟลว์ปัจจุบัน การอัปเดตอาจต้องรอ สร้างและแก้แต่ละ OverlayText ในโฟลว์เดียว"},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"sp","type":"Number","defaultValue":null,"description":"Text size in sp.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"คืน overlay เดิมเพื่อเรียกเมธอดถัดไปได้","example":"# ตั้งค่าหรือตรวจสอบโอเวอร์เลย์ของโฟลว์นี้\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.size(20)\nbadge.show()","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-position","kind":"METHOD","parentKey":"class-overlaytext","name":"position","signature":"overlay.position(position)","description":"อัปเดตตำแหน่งการวาดด้วย Point หรือ tuple/list (x, y) จุดมีข้อมูลเมตามาตราส่วน/จุดยึด","behavior":"อัปเดตตำแหน่งการวาดด้วย Point หรือ tuple/list (x, y) จุดมีข้อมูลเมตามาตราส่วน/จุดยึด","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() ลบเฉพาะข้อความลอยของโฟลว์ปัจจุบัน การอัปเดตอาจต้องรอ สร้างและแก้แต่ละ OverlayText ในโฟลว์เดียว"},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"position","type":"Point | tuple[Number, Number]","defaultValue":null,"description":"New position.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"คืน overlay เดิมเพื่อเรียกเมธอดถัดไปได้","example":"# ตั้งค่าหรือตรวจสอบโอเวอร์เลย์ของโฟลว์นี้\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.position((80, 160))\nbadge.show()","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-track","kind":"METHOD","parentKey":"class-overlaytext","name":"track","signature":"overlay.track(press=False, move=False, hold=False, hold_ms=600)","description":"กำหนดการติดตามการกด ลาก และกดค้าง หากทุกตัวเลือกเป็น False ข้อความจะอยู่กับที่และการสัมผัสจะผ่านไปยังสิ่งที่อยู่ด้านล่าง เมื่อข้อความซ้อนกับไฮไลต์ที่ลากได้ ข้อความที่เปิดการติดตามจะรับการสัมผัสก่อน หากเริ่มสัมผัสนอกข้อความ การลากจะยังควบคุมไฮไลต์","behavior":"กำหนดการติดตามการกด ลาก และกดค้าง หากทุกตัวเลือกเป็น False ข้อความจะอยู่กับที่และการสัมผัสจะผ่านไปยังสิ่งที่อยู่ด้านล่าง เมื่อข้อความซ้อนกับไฮไลต์ที่ลากได้ ข้อความที่เปิดการติดตามจะรับการสัมผัสก่อน หากเริ่มสัมผัสนอกข้อความ การลากจะยังควบคุมไฮไลต์","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() ลบเฉพาะข้อความลอยของโฟลว์ปัจจุบัน การอัปเดตอาจต้องรอ สร้างและแก้แต่ละ OverlayText ในโฟลว์เดียว"},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"press","type":"Boolean","defaultValue":"False","description":"รายงาน PRESSED เมื่อปล่อยหลังจากกดสั้น โดยไม่ได้ลากหรือกดค้าง","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"move","type":"Boolean","defaultValue":"False","description":"อนุญาตให้ลากข้อความ การเคลื่อนไหวภายในเกณฑ์สัมผัสของอุปกรณ์จะไม่ทำให้ข้อความเคลื่อนที่ และจะเริ่มลากเมื่อเกินเกณฑ์เท่านั้น","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"hold","type":"Boolean","defaultValue":"False","description":"รายงาน HOLDING เมื่อกดค้างครบ hold_ms แล้วรายงาน HOLDED เมื่อปล่อย โดยการลากมีลำดับความสำคัญสูงกว่า","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"hold_ms","type":"Number","defaultValue":"600","description":"เวลาที่ต้องกดค้างก่อน HOLDING เป็นมิลลิวินาที ค่าต่ำกว่า 150 ใช้ 150","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"คืน overlay เดิมเพื่อเรียกเมธอดถัดไปได้","example":"# ตั้งค่าหรือตรวจสอบโอเวอร์เลย์ของโฟลว์นี้\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.track(press=True, move=True, hold=True, hold_ms=700)\nbadge.show()\nprint(badge.state())","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-get-point","kind":"METHOD","parentKey":"class-overlaytext","name":"get_point","signature":"overlay.get_point()","description":"รับ Point มุมซ้ายบนปัจจุบันของข้อความลอย ตำแหน่งนี้จะอัปเดตหลังจากลากข้อความ การเรียกนี้ไม่ล้างเหตุการณ์การโต้ตอบที่ยังไม่ได้อ่าน","behavior":"รับ Point มุมซ้ายบนปัจจุบันของข้อความลอย ตำแหน่งนี้จะอัปเดตหลังจากลากข้อความ การเรียกนี้ไม่ล้างเหตุการณ์การโต้ตอบที่ยังไม่ได้อ่าน","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() ลบเฉพาะข้อความลอยของโฟลว์ปัจจุบัน การอัปเดตอาจต้องรอ สร้างและแก้แต่ละ OverlayText ในโฟลว์เดียว"},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Point","returnDescription":"ตำแหน่งการซ้อนทับปัจจุบันในพิกเซลของหน้าจอ","example":"# ตั้งค่าหรือตรวจสอบโอเวอร์เลย์ของโฟลว์นี้\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.show()\npoint = badge.get_point()\nprint(point.x, point.y)","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-get-region","kind":"METHOD","parentKey":"class-overlaytext","name":"get_region","signature":"overlay.get_region()","description":"รับ Region ที่ครอบคลุมขอบเขตข้อความลอยปัจจุบัน คืนค่า None เมื่อข้อความไม่แสดงหรือยังวัดขนาดไม่เสร็จ การเรียกนี้ไม่ล้างเหตุการณ์การโต้ตอบที่ยังไม่ได้อ่าน","behavior":"รับ Region ที่ครอบคลุมขอบเขตข้อความลอยปัจจุบัน คืนค่า None เมื่อข้อความไม่แสดงหรือยังวัดขนาดไม่เสร็จ การเรียกนี้ไม่ล้างเหตุการณ์การโต้ตอบที่ยังไม่ได้อ่าน","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() ลบเฉพาะข้อความลอยของโฟลว์ปัจจุบัน การอัปเดตอาจต้องรอ สร้างและแก้แต่ละ OverlayText ในโฟลว์เดียว"},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Region?","returnDescription":"ขอบเขตขอบเขตสำหรับข้อความซ้อนทับ หรือไม่มี ตรวจสอบไม่มีทุกครั้งก่อนใช้ภูมิภาค","example":"# ตั้งค่าหรือตรวจสอบโอเวอร์เลย์ของโฟลว์นี้\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.show()\nbounds = badge.get_region()\nif bounds is not None:\n    print(bounds.width, bounds.height)","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-show","kind":"METHOD","parentKey":"class-overlaytext","name":"show","signature":"overlay.show()","description":"แสดงข้อความ รวมถึงหลัง hide() และใช้การเปลี่ยนแปลงเนื้อหา รูปแบบ ตำแหน่ง การติดตาม หรือพร็อพเพอร์ตีที่กำหนดค่าได้ เรียก show() อีกครั้งหลังเปลี่ยนการตั้งค่า\nหากเปลี่ยนเฉพาะตำแหน่งขณะแสดงอยู่ จะเก็บเฉพาะตำแหน่งล่าสุดไว้ใช้ในเฟรมถัดไป คำสั่งคืนค่าก่อนแสดงตำแหน่งใหม่: x/y คือตำแหน่งที่รับไว้ และ overlay_width_px/overlay_height_px เป็น None การอัปเดตอื่นรอจนใช้เสร็จ\nขณะแสดงอยู่ show() จะรักษาสถานะและเหตุการณ์หากการติดตามไม่เปลี่ยน การแสดงหลัง hide() หรือเปลี่ยนการติดตามจะรีเซ็ตเป็น IDLE และการเปลี่ยนการติดตามจะยกเลิกท่าทางเดิม","behavior":"แสดงข้อความ รวมถึงหลัง hide() และใช้การเปลี่ยนแปลงเนื้อหา รูปแบบ ตำแหน่ง การติดตาม หรือพร็อพเพอร์ตีที่กำหนดค่าได้ เรียก show() อีกครั้งหลังเปลี่ยนการตั้งค่า\nหากเปลี่ยนเฉพาะตำแหน่งขณะแสดงอยู่ จะเก็บเฉพาะตำแหน่งล่าสุดไว้ใช้ในเฟรมถัดไป คำสั่งคืนค่าก่อนแสดงตำแหน่งใหม่: x/y คือตำแหน่งที่รับไว้ และ overlay_width_px/overlay_height_px เป็น None การอัปเดตอื่นรอจนใช้เสร็จ\nขณะแสดงอยู่ show() จะรักษาสถานะและเหตุการณ์หากการติดตามไม่เปลี่ยน การแสดงหลัง hide() หรือเปลี่ยนการติดตามจะรีเซ็ตเป็น IDLE และการเปลี่ยนการติดตามจะยกเลิกท่าทางเดิม","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() ลบเฉพาะข้อความลอยของโฟลว์ปัจจุบัน การอัปเดตอาจต้องรอ สร้างและแก้แต่ละ OverlayText ในโฟลว์เดียว"},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"พจนานุกรมสถานะซ้อนทับปัจจุบัน","example":"# ตั้งค่าหรือตรวจสอบโอเวอร์เลย์ของโฟลว์นี้\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.show()\nbadge.text(\"Running\")\nprint(badge.show())","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-hide","kind":"METHOD","parentKey":"class-overlaytext","name":"hide","signature":"overlay.hide()","description":"ซ่อนข้อความ เรียก show() เพื่อแสดงอีกครั้ง","behavior":"ซ่อนข้อความ เรียก show() เพื่อแสดงอีกครั้ง","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() ลบเฉพาะข้อความลอยของโฟลว์ปัจจุบัน การอัปเดตอาจต้องรอ สร้างและแก้แต่ละ OverlayText ในโฟลว์เดียว"},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"พจนานุกรมสถานะซ้อนทับปัจจุบัน","example":"# ตั้งค่าหรือตรวจสอบโอเวอร์เลย์ของโฟลว์นี้\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.show()\nbadge.hide()\nbadge.show()","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-off","kind":"METHOD","parentKey":"class-overlaytext","name":"off","signature":"overlay.off()","description":"ปิดข้อความซ้อนทับและเผยแพร่ทรัพยากร","behavior":"ปิดข้อความซ้อนทับและเผยแพร่ทรัพยากร","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() ลบเฉพาะข้อความลอยของโฟลว์ปัจจุบัน การอัปเดตอาจต้องรอ สร้างและแก้แต่ละ OverlayText ในโฟลว์เดียว"},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"พจนานุกรมสถานะซ้อนทับปัจจุบัน","example":"# ตั้งค่าหรือตรวจสอบโอเวอร์เลย์ของโฟลว์นี้\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.show()\nprint(badge.off())","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-state","kind":"METHOD","parentKey":"class-overlaytext","name":"state","signature":"overlay.state()","description":"อ่านสถานะล่าสุด เมื่อเปิดการติดตามที่เกี่ยวข้อง:\nกดแล้วปล่อย → PRESSED (1)\nกำลังลาก → MOVING (2); ปล่อย → MOVED (4)\nกดค้างครบ hold_ms → HOLDING (3); ปล่อย → HOLDED (7)\nสถานะอื่น: IDLE (0), HIDDEN (5), OFF (6) การกดลงเพียงอย่างเดียวยังไม่สร้างเหตุการณ์ และการลากมีลำดับความสำคัญเหนือการกดค้าง\nPRESSED, MOVED และ HOLDED ส่งกลับเพียงครั้งเดียวแล้วกลับเป็น IDLE ส่วน MOVING และ HOLDING คงอยู่ขณะทำท่านั้น ระบบเก็บเฉพาะสถานะล่าสุด เหตุการณ์ใหม่จะแทนที่เหตุการณ์ที่ยังไม่ได้อ่าน การยกเลิกไม่สร้างเหตุการณ์เสร็จสิ้น และการเปลี่ยนตำแหน่งที่รอดำเนินการจะถูกนำไปใช้ก่อนอ่าน\nเฉพาะ state() ที่ใช้เหตุการณ์เสร็จสิ้น เหตุการณ์ไม่หมดอายุ แต่การอ่านทุก 100 ms ไม่รับประกันว่าจะเก็บทุกเหตุการณ์ระหว่างการอ่าน","behavior":"อ่านสถานะล่าสุด เมื่อเปิดการติดตามที่เกี่ยวข้อง:\nกดแล้วปล่อย → PRESSED (1)\nกำลังลาก → MOVING (2); ปล่อย → MOVED (4)\nกดค้างครบ hold_ms → HOLDING (3); ปล่อย → HOLDED (7)\nสถานะอื่น: IDLE (0), HIDDEN (5), OFF (6) การกดลงเพียงอย่างเดียวยังไม่สร้างเหตุการณ์ และการลากมีลำดับความสำคัญเหนือการกดค้าง\nPRESSED, MOVED และ HOLDED ส่งกลับเพียงครั้งเดียวแล้วกลับเป็น IDLE ส่วน MOVING และ HOLDING คงอยู่ขณะทำท่านั้น ระบบเก็บเฉพาะสถานะล่าสุด เหตุการณ์ใหม่จะแทนที่เหตุการณ์ที่ยังไม่ได้อ่าน การยกเลิกไม่สร้างเหตุการณ์เสร็จสิ้น และการเปลี่ยนตำแหน่งที่รอดำเนินการจะถูกนำไปใช้ก่อนอ่าน\nเฉพาะ state() ที่ใช้เหตุการณ์เสร็จสิ้น เหตุการณ์ไม่หมดอายุ แต่การอ่านทุก 100 ms ไม่รับประกันว่าจะเก็บทุกเหตุการณ์ระหว่างการอ่าน","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() ลบเฉพาะข้อความลอยของโฟลว์ปัจจุบัน การอัปเดตอาจต้องรอ สร้างและแก้แต่ละ OverlayText ในโฟลว์เดียว"},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"พจนานุกรมสถานะที่มีข้อความต้นฉบับ supports_inline_bold=True, status/status_label ตัวเลือกการติดตาม และความกว้าง/ความสูงของข้อความลอยเป็นพิกเซลเมื่อมีค่า","example":"# ตั้งค่าหรือตรวจสอบโอเวอร์เลย์ของโฟลว์นี้\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.track(press=True, move=True)\nbadge.show()\nstate = badge.state()\nprint(state[\"status_label\"])","aliases":[],"group":"FLOW"},{"key":"class-timer","kind":"CLASS","parentKey":null,"name":"Timer","signature":"Timer(auto_start=True)","description":"วัดเวลาที่ผ่านไปเป็นมิลลิวินาที หยุดชั่วคราวแล้วนับต่อโดยไม่เสียเวลาที่นับแล้ว","behavior":"วัดเวลาที่ผ่านไปเป็นมิลลิวินาที หยุดชั่วคราวแล้วนับต่อโดยไม่เสียเวลาที่นับแล้ว","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["auto_start"],"fieldDocs":[{"name":"auto_start","type":"Boolean","defaultValue":"True","description":"Whether the timer starts immediately after creation. Assign True to start; assign False to pause.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"auto_start","type":"Boolean","defaultValue":"True","description":"Start counting immediately after creation.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"fieldExample":null,"constructorExample":"timer = Timer()\nif timer.is_elapsed(500):\n    text(\"half-second passed\")","params":[],"returnType":null,"returnDescription":null,"example":"timer = Timer(auto_start=False)\ntimer.start()\nwhile not timer.is_elapsed(2000):\n    wait(50)\ntimer.stop()","aliases":[],"group":null},{"key":"class-timer-method-start","kind":"METHOD","parentKey":"class-timer","name":"start","signature":"timer.start()","description":"เริ่มนับหากตัวจับเวลาหยุดอยู่ในขณะนี้","behavior":"เริ่มนับหากตัวจับเวลาหยุดอยู่ในขณะนี้","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"คืน timer เดิมเพื่อเรียกเมธอดถัดไปได้","example":"# วัดเวลาในโฟลว์ที่เรียกใช้งาน\ntimer = Timer(auto_start=False)\ntimer.start()\nwait(100)\nprint(timer.elapsed_ms())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-pause","kind":"METHOD","parentKey":"class-timer","name":"pause","signature":"timer.pause()","description":"Pause counting while preserving elapsed milliseconds.","behavior":"Pause counting while preserving elapsed milliseconds.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"คืน timer เดิมเพื่อเรียกเมธอดถัดไปได้","example":"# วัดเวลาในโฟลว์ที่เรียกใช้งาน\ntimer = Timer()\nwait(100)\ntimer.pause()\nprint(timer.elapsed_ms())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-resume","kind":"METHOD","parentKey":"class-timer","name":"resume","signature":"timer.resume()","description":"นับต่อ หรือเริ่มนับหาก timer ยังไม่เคยทำงาน","behavior":"นับต่อ หรือเริ่มนับหาก timer ยังไม่เคยทำงาน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"คืน timer เดิมเพื่อเรียกเมธอดถัดไปได้","example":"# วัดเวลาในโฟลว์ที่เรียกใช้งาน\ntimer = Timer()\ntimer.pause()\ntimer.resume()\nwait(100)\nprint(timer.elapsed_ms())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-stop","kind":"METHOD","parentKey":"class-timer","name":"stop","signature":"timer.stop()","description":"หยุดนับและหยุดมิลลิวินาทีที่ผ่านไปไว้","behavior":"หยุดนับและหยุดมิลลิวินาทีที่ผ่านไปไว้","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"คืน timer เดิมเพื่อเรียกเมธอดถัดไปได้","example":"# วัดเวลาในโฟลว์ที่เรียกใช้งาน\ntimer = Timer()\nwait(100)\ntimer.stop()\nprint(timer.elapsed_ms())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-reset","kind":"METHOD","parentKey":"class-timer","name":"reset","signature":"timer.reset()","description":"รีเซ็ตเวลาที่ผ่านไปเป็น 0 ในขณะที่ยังคงสถานะการทำงานปัจจุบันไว้","behavior":"รีเซ็ตเวลาที่ผ่านไปเป็น 0 ในขณะที่ยังคงสถานะการทำงานปัจจุบันไว้","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"คืน timer เดิมเพื่อเรียกเมธอดถัดไปได้","example":"# วัดเวลาในโฟลว์ที่เรียกใช้งาน\ntimer = Timer()\nwait(100)\ntimer.reset()\nprint(timer.elapsed_ms())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-restart","kind":"METHOD","parentKey":"class-timer","name":"restart","signature":"timer.restart()","description":"รีเซ็ตเวลาที่ผ่านไปเป็น 0 และเริ่มนับทันที","behavior":"รีเซ็ตเวลาที่ผ่านไปเป็น 0 และเริ่มนับทันที","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"คืน timer เดิมเพื่อเรียกเมธอดถัดไปได้","example":"# วัดเวลาในโฟลว์ที่เรียกใช้งาน\ntimer = Timer(auto_start=False)\ntimer.restart()\nwait(100)\nprint(timer.elapsed_ms())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-elapsed-ms","kind":"METHOD","parentKey":"class-timer","name":"elapsed_ms","signature":"timer.elapsed_ms()","description":"อ่านค่ามิลลิวินาทีที่ผ่านไปทั้งหมด","behavior":"อ่านค่ามิลลิวินาทีที่ผ่านไปทั้งหมด","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number","returnDescription":"มิลลิวินาทีที่ผ่านไป","example":"# วัดเวลาในโฟลว์ที่เรียกใช้งาน\ntimer = Timer()\nwait(100)\nprint(timer.elapsed_ms())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-is-elapsed","kind":"METHOD","parentKey":"class-timer","name":"is_elapsed","signature":"timer.is_elapsed(time)","description":"ตรวจสอบว่าเวลาที่ผ่านไปมากกว่าหรือเท่ากับมิลลิวินาทีที่ระบุ","behavior":"ตรวจสอบว่าเวลาที่ผ่านไปมากกว่าหรือเท่ากับมิลลิวินาทีที่ระบุ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"time","type":"Number","defaultValue":null,"description":"เวลาที่เปรียบเทียบเป็นมิลลิวินาที ค่าติดลบใช้ 0 และตัดส่วนทศนิยม","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"เป็นจริงเมื่อเวลาที่ผ่านไปถึงหรือเกินเกณฑ์","example":"# วัดเวลาในโฟลว์ที่เรียกใช้งาน\ntimer = Timer()\nwait(500)\nif timer.is_elapsed(500):\n    print(\"Elapsed\")","aliases":[],"group":"FLOW"},{"key":"class-timer-method-is-running","kind":"METHOD","parentKey":"class-timer","name":"is_running","signature":"timer.is_running()","description":"ตรวจสอบว่าตัวจับเวลากำลังนับอยู่หรือไม่","behavior":"ตรวจสอบว่าตัวจับเวลากำลังนับอยู่หรือไม่","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"เป็นจริงเมื่อมีการนับเวลา","example":"# วัดเวลาในโฟลว์ที่เรียกใช้งาน\ntimer = Timer()\nprint(timer.is_running())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-is-paused","kind":"METHOD","parentKey":"class-timer","name":"is_paused","signature":"timer.is_paused()","description":"ตรวจสอบว่าตัวจับเวลาหยุดชั่วคราวหลังจากเริ่มต้นแล้วหรือไม่","behavior":"ตรวจสอบว่าตัวจับเวลาหยุดชั่วคราวหลังจากเริ่มต้นแล้วหรือไม่","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"เป็นจริงเมื่อหยุดตัวจับเวลาชั่วคราว","example":"# วัดเวลาในโฟลว์ที่เรียกใช้งาน\ntimer = Timer()\ntimer.pause()\nprint(timer.is_paused())","aliases":[],"group":"FLOW"},{"key":"class-tflitemodel","kind":"CLASS","parentKey":null,"name":"TfliteModel","signature":"TfliteModel(model)","description":"ใช้โมเดล TFLite ที่นำเข้าในตัวจัดการเทมเพลตเพื่อตรวจจับวัตถุหรือจำแนกภาพ เลือกชนิดโมเดลให้ถูกต้องที่นั่น\nรองรับเอาต์พุต: ตรวจจับ YOLOv8/YOLO11 [1,N,4+C]/[1,4+C,N]; ตรวจจับ YOLO26 [1,N,6]/[N,6]; จำแนก YOLO11/YOLO26 และ MobileNetV3 [1,C] รองรับ FLOAT32, INT8 และ UINT8 โดยอัตโนมัติ\nการจำแนกคืนคะแนนและข้อมูลคลาสโดยไม่มีจุดหรือกรอบบนหน้าจอ การรันต้องมีไฟล์โมเดลในเครื่อง หากหาไฟล์ไม่ได้จะเกิดข้อผิดพลาด","behavior":"ใช้โมเดล TFLite ที่นำเข้าในตัวจัดการเทมเพลตเพื่อตรวจจับวัตถุหรือจำแนกภาพ เลือกชนิดโมเดลให้ถูกต้องที่นั่น\nรองรับเอาต์พุต: ตรวจจับ YOLOv8/YOLO11 [1,N,4+C]/[1,4+C,N]; ตรวจจับ YOLO26 [1,N,6]/[N,6]; จำแนก YOLO11/YOLO26 และ MobileNetV3 [1,C] รองรับ FLOAT32, INT8 และ UINT8 โดยอัตโนมัติ\nการจำแนกคืนคะแนนและข้อมูลคลาสโดยไม่มีจุดหรือกรอบบนหน้าจอ การรันต้องมีไฟล์โมเดลในเครื่อง หากหาไฟล์ไม่ได้จะเกิดข้อผิดพลาด","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["model","resize_mode","color_mode","norm_mode","padding_color"],"fieldDocs":[{"name":"model","type":"String","defaultValue":null,"description":"Model reference in current macro (prefer template model name; legacy model id still accepted).","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"resize_mode","type":"String","defaultValue":"LETTERBOX","description":"วิธีปรับขนาดภาพ: LETTERBOX คงสัดส่วนและเติมขอบ; STRETCH ยืดเต็มขนาดเข้า; CROP_CENTER ตัดส่วนกลาง","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"color_mode","type":"String","defaultValue":"RGB","description":"รูปแบบสีภาพที่โมเดลใช้: RGB, BGR หรือ GRAYSCALE","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"norm_mode","type":"String","defaultValue":"ZERO_ONE","description":"วิธีแปลงค่าพิกเซลให้โมเดล: ZERO_ONE, MINUS_ONE_ONE, IMAGENET หรือ CUSTOM","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"padding_color","type":"Int","defaultValue":"114","description":"ค่าตั้งแต่ 0 ถึง 255 สำหรับเติมขอบที่ LETTERBOX เพิ่ม","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"model","type":"String","defaultValue":null,"description":"Model reference to use for inference (prefer template model name).","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"fieldExample":null,"constructorExample":"# นำเข้าโมเดล TFLite ที่รองรับ แล้วเลือกชนิดเอาต์พุตใน Template Manager\n# สร้าง model handle ที่ผูกกับชื่อโมเดล TFLite หนึ่งรายการใน Template Manager\nmodel = TfliteModel(\"enemy_model\")","params":[],"returnType":null,"returnDescription":null,"example":"# ตรวจสอบความพร้อมของโมเดลก่อนรันการตรวจจับ\nif TfliteModel.exists(\"enemy_model\"):\n    detector = TfliteModel(\"enemy_model\")\n    hits = detector.inference()\n    if len(hits) > 0:\n        click(hits[0])","aliases":[],"group":null},{"key":"class-tflitemodel-static-method-exists","kind":"STATIC_METHOD","parentKey":"class-tflitemodel","name":"exists","signature":"TfliteModel.exists(model)","description":"ตรวจสอบว่าไฟล์โมเดล TFLite ในเครื่อง (แก้ไขด้วยชื่อรุ่นหรือรหัสเดิม) พร้อมใช้งานในมาโครนี้หรือไม่","behavior":"ตรวจสอบว่าไฟล์โมเดล TFLite ในเครื่อง (แก้ไขด้วยชื่อรุ่นหรือรหัสเดิม) พร้อมใช้งานในมาโครนี้หรือไม่","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"model","type":"String","defaultValue":null,"description":"Model reference to check.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"เป็นจริงหากไฟล์โมเดลในเครื่องพร้อมใช้งาน","example":"# ตรวจสอบโมเดลที่นำเข้าใน Template Manager\nif TfliteModel.exists(\"enemy_detector\"):\n    print(\"Model available\")","aliases":[],"group":"FLOW"},{"key":"class-tflitemodel-static-method-list","kind":"STATIC_METHOD","parentKey":"class-tflitemodel","name":"list","signature":"TfliteModel.list()","description":"ส่งคืนการอ้างอิงโมเดลท้องถิ่นที่มีอยู่ในปัจจุบันสำหรับมาโคร (ต้องการชื่อที่แสดง)","behavior":"ส่งคืนการอ้างอิงโมเดลท้องถิ่นที่มีอยู่ในปัจจุบันสำหรับมาโคร (ต้องการชื่อที่แสดง)","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list[String]","returnDescription":"รายการอ้างอิงรุ่น","example":"# แสดงรายการโมเดลที่มาโครนี้ใช้งานได้\nprint(TfliteModel.list())","aliases":[],"group":"FLOW"},{"key":"class-tflitemodel-method-exists","kind":"METHOD","parentKey":"class-tflitemodel","name":"exists","signature":"model.exists()","description":"ตรวจสอบว่าไฟล์โมเดลในเครื่องของตัวตรวจจับนี้พร้อมใช้งานหรือไม่","behavior":"ตรวจสอบว่าไฟล์โมเดลในเครื่องของตัวตรวจจับนี้พร้อมใช้งานหรือไม่","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"เป็นจริงหากไฟล์โมเดลโลคัลสามารถใช้งานได้ทันที","example":"# สร้างออบเจ็กต์หลังยืนยันว่ามีโมเดลที่นำเข้าแล้วเท่านั้น\nif TfliteModel.exists(\"enemy_detector\"):\n    model = TfliteModel(\"enemy_detector\")\n    print(model.exists())","aliases":[],"group":"FLOW"},{"key":"class-tflitemodel-method-inference","kind":"METHOD","parentKey":"class-tflitemodel","name":"inference","signature":"model.inference(threshold=0.5, region=None, max_results=8, debug=False)","description":"รันโมเดลบนภาพหน้าจอปัจจุบันหนึ่งภาพหรือ region ที่ระบุ แล้วคืน MatchList ของทุกคลาส รายการว่างหมายถึงไม่พบหรือยังไม่มีเฟรมหน้าจอ การขาดสิทธิ์จับภาพ การโหลดหรือรันล้มเหลวเป็นข้อผิดพลาด\nregion ครอบตัดภาพก่อนประมวลผล ควรใช้ภาพคล้ายข้อมูลฝึกโมเดล การครอบตัดอาจลดความแม่นยำ ผลจำแนกไม่มีจุดหรือกรอบ\nในโหมดแก้ไข การตั้งค่ากรอบดีบักการตรวจจับจะแสดงพื้นที่สแกนสีแดงและกรอบวัตถุที่ตรวจพบสีเขียว แม้ใช้ debug=False โมเดลจำแนกประเภทจะแสดงเฉพาะพื้นที่สแกน","behavior":"รันโมเดลบนภาพหน้าจอปัจจุบันหนึ่งภาพหรือ region ที่ระบุ แล้วคืน MatchList ของทุกคลาส รายการว่างหมายถึงไม่พบหรือยังไม่มีเฟรมหน้าจอ การขาดสิทธิ์จับภาพ การโหลดหรือรันล้มเหลวเป็นข้อผิดพลาด\nregion ครอบตัดภาพก่อนประมวลผล ควรใช้ภาพคล้ายข้อมูลฝึกโมเดล การครอบตัดอาจลดความแม่นยำ ผลจำแนกไม่มีจุดหรือกรอบ\nในโหมดแก้ไข การตั้งค่ากรอบดีบักการตรวจจับจะแสดงพื้นที่สแกนสีแดงและกรอบวัตถุที่ตรวจพบสีเขียว แม้ใช้ debug=False โมเดลจำแนกประเภทจะแสดงเฉพาะพื้นที่สแกน","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"threshold","type":"Number","defaultValue":"0.5","description":"คะแนนความมั่นใจขั้นต่ำตั้งแต่ 0 ถึง 1 เมื่อรันโมเดล แอปใช้ค่าอย่างน้อย 0.01","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"region","type":"Region?","defaultValue":"None","description":"Optional screen region. Its image is cropped before preprocessing and inference, which can reduce accuracy if the model was not trained on similarly cropped images.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"max_results","type":"Int","defaultValue":"8","description":"จำนวนผลลัพธ์สูงสุดที่คืนค่า ตัดส่วนทศนิยมแล้วจำกัดค่าไว้ที่ 1..64","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"debug","type":"Boolean","defaultValue":"False","description":"True เปิดภาพตัวอย่างและผลโมเดลในโหมดแก้ไข การตรวจจับแสดงกรอบและคลาส การจำแนกแสดงภาพเข้าและคะแนนคลาส โหมดรันอย่างเดียวละเว้นตัวเลือกนี้ ค่า Match ที่คืนไม่มี debug_result","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"รายการจับคู่การอนุมานในทุกคลาส","example":"# รัน inference ของโมเดลดิบและตรวจดูเอาต์พุต debug ของ preprocess\ndetector = TfliteModel(\"enemy_model\")\nsearch = Region(100, 200, 300, 400)\nhits = detector.inference(threshold=0.55, region=search, max_results=12, debug=True)\ntext(str(len(hits)))","aliases":[],"group":"FLOW"},{"key":"class-flow","kind":"READ_ONLY_CLASS","parentKey":null,"name":"Flow","signature":"Flow","description":"เรียกโฟลว์แมโครที่มีชื่อให้ทำงานพร้อมกันและส่งข้อความระหว่างกัน แต่ละโฟลว์มีตัวแปรของตน ส่งข้อมูลเริ่มต้นผ่าน Flow.params ข้อความเป็นสำเนาอิสระและอ่านตามลำดับที่ส่ง","behavior":"เรียกโฟลว์แมโครที่มีชื่อให้ทำงานพร้อมกันและส่งข้อความระหว่างกัน แต่ละโฟลว์มีตัวแปรของตน ส่งข้อมูลเริ่มต้นผ่าน Flow.params ข้อความเป็นสำเนาอิสระและอ่านตามลำดับที่ส่ง","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"yes","details":"Flow.start() คืนเลขลำดับ Int บวก มีโฟลว์เบื้องหลังสูงสุดสองโฟลว์ร่วมกับโฟลว์หลัก มาโครรอให้จบ ข้อผิดพลาดในโฟลว์ใดหรือ System.stop() หยุดทั้งหมด"},"limitations":[],"relatedApis":["class-system-static-method-stop","class-storage","class-screencapture"],"isCallable":false,"fields":[],"fieldDocs":[{"name":"params","type":"dict","defaultValue":null,"description":"ข้อมูลเริ่มต้นของโฟลว์นี้ แต่ละครั้งที่อ่านจะได้ dict อิสระ การแก้ไขไม่เปลี่ยนข้อมูลผู้ส่งหรือการอ่านครั้งถัดไป โฟลว์หลักได้ dict ว่าง","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# บันทึกเทมเพลต enemy และตั้งค่า watch_enemy ก่อนเรียกใช้\n# Main: เปิดใช้งาน watcher แล้วหยุดหลังงานหลัก\nFlow.start(\"watch_enemy\")\nFlow.send(\"watch_enemy\", {\"command\": \"ARM\"})\nwait(1000)\nFlow.stop(\"watch_enemy\")","aliases":[],"group":null},{"key":"class-flow-static-method-start","kind":"STATIC_METHOD","parentKey":"class-flow","name":"start","signature":"Flow.start(name, params=None)","description":"เริ่มโฟลว์ที่ตั้งค่าไว้ให้ทำงานพร้อมโฟลว์หลัก ส่งข้อความได้ทันทีเมื่อคำสั่งคืนค่า มีโฟลว์เบื้องหลังได้สูงสุดสองโฟลว์ และโฟลว์เหล่านี้เริ่มโฟลว์อื่นได้\nชื่อเดียวกันเรียกซ้ำไม่ได้ แม้กำลังพักหรือหยุด ชื่อผิดหรือซ้ำ จำนวนโฟลว์เต็ม หรือโฟลว์เกิดข้อผิดพลาดจะหยุด Run ทั้งหมด System.stop() และ Main Stop ก็หยุดทุกโฟลว์\nโฟลว์หลักรอโฟลว์เบื้องหลังก่อนจบ Run จึงต้องสั่งหยุดโฟลว์ที่วนไม่สิ้นสุด ข้อมูลเริ่มต้นถูกคัดลอกตามขีดจำกัดของ Flow.send()","behavior":"เริ่มโฟลว์ที่ตั้งค่าไว้ให้ทำงานพร้อมโฟลว์หลัก ส่งข้อความได้ทันทีเมื่อคำสั่งคืนค่า มีโฟลว์เบื้องหลังได้สูงสุดสองโฟลว์ และโฟลว์เหล่านี้เริ่มโฟลว์อื่นได้\nชื่อเดียวกันเรียกซ้ำไม่ได้ แม้กำลังพักหรือหยุด ชื่อผิดหรือซ้ำ จำนวนโฟลว์เต็ม หรือโฟลว์เกิดข้อผิดพลาดจะหยุด Run ทั้งหมด System.stop() และ Main Stop ก็หยุดทุกโฟลว์\nโฟลว์หลักรอโฟลว์เบื้องหลังก่อนจบ Run จึงต้องสั่งหยุดโฟลว์ที่วนไม่สิ้นสุด ข้อมูลเริ่มต้นถูกคัดลอกตามขีดจำกัดของ Flow.send()","execution":{"blocking":"no","threadSafety":"serialized","parallel":"yes","details":"เริ่มโฟลว์เบื้องหลังตามชื่อด้วยสำเนาอินพุต แล้วคืนค่าโดยไม่รอให้จบ"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"ชื่อที่ตรงกับโฟลว์ที่ตั้งค่าไว้","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"params","type":"dict?","defaultValue":"None","description":"ข้อมูลเริ่มต้นที่ระบุได้ ระบบจะคัดลอกให้โฟลว์ใหม่อ่านผ่าน Flow.params","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Int","returnDescription":"เลขบวกที่เพิ่มขึ้นทุกครั้งที่เริ่ม ใช้ในสถานะบน dock และบันทึก ไม่สามารถใช้เลขนี้ควบคุมโฟลว์ได้","example":"# เริ่มการตรวจจับและ telemetry ข้าง main flow\nrecognition_no = Flow.start(\"recognition\", {\"region\": \"arena\", \"threshold\": 0.86})\ntelemetry_no = Flow.start(\"telemetry\")\n\n# อ่านอินพุตที่คัดลอกของ branch นี้ภายใน flow ตรวจจับที่ตั้งค่าไว้\nregion_name = Flow.params.get(\"region\", \"full_screen\")\nthreshold = Flow.params.get(\"threshold\", 0.8)","aliases":[],"group":"FLOW"},{"key":"class-flow-static-method-send","kind":"STATIC_METHOD","parentKey":"class-flow","name":"send","signature":"Flow.send(name, data)","description":"ส่งสำเนาแยกอิสระไปยังโฟลว์ที่กำลังทำงานโดยไม่รอ หลายโฟลว์ส่งข้อความได้อย่างปลอดภัย และรับข้อความตามลำดับที่ส่ง รวมถึงขณะพัก ค่าที่ใช้ได้คือ None, Boolean, จำนวนจำกัด, String, list, tuple และ dict ที่มีคีย์เป็น String ซ้อนกันได้ลึกไม่เกิน 8 ชั้น มีค่ารวมไม่เกิน 512 ค่า และข้อความยาวรวมไม่เกิน 65536 ฟังก์ชัน ออบเจ็กต์ทรัพยากรหรือของแอป และการอ้างอิงวนทำให้เกิดข้อผิดพลาด ทุกครั้งที่เริ่มมีคิวข้อความใหม่ ข้อความที่ยังไม่อ่านจะถูกทิ้งเมื่อโฟลว์หยุดหรือจบ","behavior":"ส่งสำเนาแยกอิสระไปยังโฟลว์ที่กำลังทำงานโดยไม่รอ หลายโฟลว์ส่งข้อความได้อย่างปลอดภัย และรับข้อความตามลำดับที่ส่ง รวมถึงขณะพัก ค่าที่ใช้ได้คือ None, Boolean, จำนวนจำกัด, String, list, tuple และ dict ที่มีคีย์เป็น String ซ้อนกันได้ลึกไม่เกิน 8 ชั้น มีค่ารวมไม่เกิน 512 ค่า และข้อความยาวรวมไม่เกิน 65536 ฟังก์ชัน ออบเจ็กต์ทรัพยากรหรือของแอป และการอ้างอิงวนทำให้เกิดข้อผิดพลาด ทุกครั้งที่เริ่มมีคิวข้อความใหม่ ข้อความที่ยังไม่อ่านจะถูกทิ้งเมื่อโฟลว์หยุดหรือจบ","execution":{"blocking":"no","threadSafety":"serialized","parallel":"yes","details":"ประสานการเรียกพร้อมกันโดยไม่รอข้อความหรือเก็บกวาด Flow.stop() หยุดโฟลว์เบื้องหลังเดียว โฟลว์หลักและโฟลว์อื่นทำต่อ"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"ชื่อที่ตรงกับโฟลว์ปลายทางที่ตั้งค่าไว้ โฟลว์หลักไม่มีชื่อที่กำหนดให้อัตโนมัติ","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"data","type":"Any","defaultValue":null,"description":"ค่าที่ต้องการส่ง ระบบจะคัดลอกก่อนเพิ่มลงในคิวข้อความ","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"True เมื่อรับข้อความแล้ว False เมื่อไม่รู้จักเป้าหมาย เป้าหมายไม่ทำงานหรือกำลังหยุด","example":"# ส่งคำสั่ง ARM ให้ watcher ที่ตั้งค่าไว้\nFlow.start(\"watch_enemy\")\naccepted = Flow.send(\"watch_enemy\", {\"command\": \"ARM\"})\nprint(accepted)","aliases":[],"group":"FLOW"},{"key":"class-flow-static-method-receive","kind":"STATIC_METHOD","parentKey":"class-flow","name":"receive","signature":"Flow.receive(timeout=None)","description":"รอแล้วนำข้อความเก่าสุดของโฟลว์นี้ออกมา โฟลว์หลักและโฟลว์เบื้องหลังรับข้อความได้ กลุ่มที่มีชื่อซึ่งทำงานซ้อนในโฟลว์เดียวกันใช้คิวร่วมกับโฟลว์นั้น\nการยกเลิกทำให้หยุดรอทันที Pause เก็บข้อความในคิวไว้ list และ dict ที่ได้รับเป็นสำเนาอิสระ","behavior":"รอแล้วนำข้อความเก่าสุดของโฟลว์นี้ออกมา โฟลว์หลักและโฟลว์เบื้องหลังรับข้อความได้ กลุ่มที่มีชื่อซึ่งทำงานซ้อนในโฟลว์เดียวกันใช้คิวร่วมกับโฟลว์นั้น\nการยกเลิกทำให้หยุดรอทันที Pause เก็บข้อความในคิวไว้ list และ dict ที่ได้รับเป็นสำเนาอิสระ","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"yes","details":"รอข้อความของโฟลว์นี้หรือหมดเวลา timeout=0 ตรวจทันที การหยุดโฟลว์จบการรอโดยเร็ว"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"timeout","type":"Number?","defaultValue":"None","description":"เวลารอแบบไม่บังคับ เป็นจำนวนจำกัด หน่วยมิลลิวินาที: 0 <= timeout < 2^63 ตัดเศษมิลลิวินาทีทิ้ง None รอไม่จำกัด 0 ตรวจทันที","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Any?","returnDescription":"ข้อความที่เก่าที่สุด หรือ None เมื่อหมดเวลารอหรือเมื่อตรวจทันทีแล้วไม่มีข้อความ ข้อความที่มีค่า None ก็คืนค่า None เช่นกัน","example":"# โฟลว์ watch_enemy ที่ตั้งค่าไว้: รอ ARM แล้วตรวจคำสั่งระหว่างทำงาน\nmessage = Flow.receive()\nif message is not None and message.get(\"command\") == \"ARM\":\n    while True:\n        command = Flow.poll()\n        if command is not None:\n            print(command)\n        if Region().find(\"enemy\", timeout=0).found:\n            print(\"enemy\")\n        wait(100)","aliases":[],"group":"FLOW"},{"key":"class-flow-static-method-poll","kind":"STATIC_METHOD","parentKey":"class-flow","name":"poll","signature":"Flow.poll()","description":"รับข้อความที่เก่าที่สุดของโฟลว์นี้ทันทีโดยไม่รอ ใช้คิวข้อความและสำเนาแยกอิสระเช่นเดียวกับ Flow.receive()","behavior":"รับข้อความที่เก่าที่สุดของโฟลว์นี้ทันทีโดยไม่รอ ใช้คิวข้อความและสำเนาแยกอิสระเช่นเดียวกับ Flow.receive()","execution":{"blocking":"no","threadSafety":"serialized","parallel":"yes","details":"ประสานการเรียกพร้อมกันโดยไม่รอข้อความหรือเก็บกวาด Flow.stop() หยุดโฟลว์เบื้องหลังเดียว โฟลว์หลักและโฟลว์อื่นทำต่อ"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Any?","returnDescription":"ข้อความที่เก่าที่สุด หรือ None เมื่อไม่มีข้อความ ข้อความที่มีค่า None ก็คืนค่า None เช่นกัน","example":"# ตรวจคำสั่งโดยไม่รอ\nmessage = Flow.poll()\nif message is not None:\n    print(message)","aliases":[],"group":"FLOW"},{"key":"class-flow-static-method-running","kind":"STATIC_METHOD","parentKey":"class-flow","name":"running","signature":"Flow.running(name)","description":"ตรวจว่าโฟลว์ตามชื่อกำลังทำงานหรือพักอยู่ ผลอาจเปลี่ยนทันทีหลังเรียก","behavior":"ตรวจว่าโฟลว์ตามชื่อกำลังทำงานหรือพักอยู่ ผลอาจเปลี่ยนทันทีหลังเรียก","execution":{"blocking":"no","threadSafety":"serialized","parallel":"yes","details":"ประสานการเรียกพร้อมกันโดยไม่รอข้อความหรือเก็บกวาด Flow.stop() หยุดโฟลว์เบื้องหลังเดียว โฟลว์หลักและโฟลว์อื่นทำต่อ"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"ชื่อที่ตรงกับโฟลว์ปลายทางที่ตั้งค่าไว้ โฟลว์หลักไม่มีชื่อที่กำหนดให้อัตโนมัติ","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"True ขณะทำงาน False เมื่อไม่รู้จัก กำลังหยุดหรือจบแล้ว","example":"print(Flow.running(\"watch_enemy\"))","aliases":[],"group":"FLOW"},{"key":"class-flow-static-method-stop","kind":"STATIC_METHOD","parentKey":"class-flow","name":"stop","signature":"Flow.stop(name)","description":"ขอหยุดโฟลว์เบื้องหลังหนึ่งโฟลว์และคืนค่าโดยไม่รอเก็บกวาด โฟลว์หลักและโฟลว์อื่นยังทำงาน คำสั่งนี้หยุดโฟลว์หลักไม่ได้ การหยุดตัวเองทำให้โฟลว์ผู้เรียกจบ\nสำหรับกลุ่มที่มีชื่อซ้อนอยู่ จะหยุดโฟลว์เบื้องหลังที่ครอบกลุ่มนั้น รอเก็บกวาดเสร็จก่อนเรียกชื่อเดิมอีกครั้ง\nDock เบื้องหลังมี Pause/Resume ส่วน Main Pause/Resume มีผลทุกโฟลว์ และ Main Resume ล้างการพักแยกของทุกโฟลว์ด้วย","behavior":"ขอหยุดโฟลว์เบื้องหลังหนึ่งโฟลว์และคืนค่าโดยไม่รอเก็บกวาด โฟลว์หลักและโฟลว์อื่นยังทำงาน คำสั่งนี้หยุดโฟลว์หลักไม่ได้ การหยุดตัวเองทำให้โฟลว์ผู้เรียกจบ\nสำหรับกลุ่มที่มีชื่อซ้อนอยู่ จะหยุดโฟลว์เบื้องหลังที่ครอบกลุ่มนั้น รอเก็บกวาดเสร็จก่อนเรียกชื่อเดิมอีกครั้ง\nDock เบื้องหลังมี Pause/Resume ส่วน Main Pause/Resume มีผลทุกโฟลว์ และ Main Resume ล้างการพักแยกของทุกโฟลว์ด้วย","execution":{"blocking":"no","threadSafety":"serialized","parallel":"yes","details":"ประสานการเรียกพร้อมกันโดยไม่รอข้อความหรือเก็บกวาด Flow.stop() หยุดโฟลว์เบื้องหลังเดียว โฟลว์หลักและโฟลว์อื่นทำต่อ"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"ชื่อที่ตรงกับโฟลว์ปลายทางที่ตั้งค่าไว้ โฟลว์หลักไม่มีชื่อที่กำหนดให้อัตโนมัติ","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"True เมื่อเพิ่งขอหยุด False เมื่อเป้าหมายไม่มี ไม่รู้จัก กำลังหยุดหรือเป็น main True ไม่ยืนยันว่าเก็บกวาดเสร็จ","example":"print(Flow.stop(\"watch_enemy\"))","aliases":[],"group":"FLOW"},{"key":"class-list","kind":"COLLECTION","parentKey":null,"name":"list","signature":"list(iterable=(), /)","description":"เก็บรายการตามลำดับ โดยมีค่าซ้ำได้ อ่านตำแหน่งเริ่มที่ 0 วนลูปผ่านรายการ หรือเพิ่ม แทนที่ และลบรายการใน list เดิมได้","behavior":"เก็บรายการตามลำดับ โดยมีค่าซ้ำได้ อ่านตำแหน่งเริ่มที่ 0 วนลูปผ่านรายการ หรือเพิ่ม แทนที่ และลบรายการใน list เดิมได้","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"numbers = list()\nnumbers.append(2)\nnumbers.extend([0, 3])\nfirst = numbers[0]        # คืนค่า 2\ncount = len(numbers)      # คืนค่า 3\n\nfor value in numbers:\n    wait(50)              # คืนค่า None","aliases":[],"group":null},{"key":"class-list-creation-method-constructor","kind":"CREATION_METHOD","parentKey":"class-list","name":"constructor","signature":"list()\nlist(iterable, /)","description":"สร้าง list ว่างหรือ list ใหม่จากแหล่งข้อมูลที่วนลูปได้ เช่น สตริง list หรือ generator รายการคงลำดับเดิม ส่วนคอลเลกชันที่ซ้อนอยู่ยังใช้ร่วมกับต้นทาง","behavior":"สร้าง list ว่างหรือ list ใหม่จากแหล่งข้อมูลที่วนลูปได้ เช่น สตริง list หรือ generator รายการคงลำดับเดิม ส่วนคอลเลกชันที่ซ้อนอยู่ยังใช้ร่วมกับต้นทาง","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","defaultValue":"()","description":"ค่าต้นทางที่จะคัดลอกลงในรายการใหม่","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"}],"returnType":"list","returnDescription":"รายการที่ไม่แน่นอนใหม่","example":"numbers = list()\nnumbers.append(2)\nnumbers.append(3)\n\ncopied = list(numbers)","aliases":[],"group":"FLOW"},{"key":"class-list-creation-method-literal","kind":"CREATION_METHOD","parentKey":"class-list","name":"literal","signature":"[1, 2, 3]","description":"สร้าง list โดยเขียนรายการในวงเล็บเหลี่ยม","behavior":"สร้าง list โดยเขียนรายการในวงเล็บเหลี่ยม","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"item","type":"Any?","defaultValue":null,"description":"Each item written inside the brackets.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"list","returnDescription":"list ใหม่ที่มีรายการตามลำดับที่เขียน","example":"numbers = [2, 0, 3]\nfirst = numbers[0]       # คืนค่า 2","aliases":[],"group":"FLOW"},{"key":"class-list-creation-method-comprehension","kind":"CREATION_METHOD","parentKey":"class-list","name":"comprehension","signature":"[expr for target in iterable if condition]","description":"สร้าง list จากค่าที่ expr คำนวณขณะวนลูปผ่านแหล่งข้อมูล ใช้ if เพื่อเก็บเฉพาะรายการที่ตรงเงื่อนไข และใช้ for/if ได้หลายชุด ตัวแปรลูปอยู่เฉพาะในนิพจน์นี้","behavior":"สร้าง list จากค่าที่ expr คำนวณขณะวนลูปผ่านแหล่งข้อมูล ใช้ if เพื่อเก็บเฉพาะรายการที่ตรงเงื่อนไข และใช้ for/if ได้หลายชุด ตัวแปรลูปอยู่เฉพาะในนิพจน์นี้","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"expr","type":"Any?","defaultValue":null,"description":"Value to append for each accepted item.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"target","type":"Name | destructuring target","defaultValue":null,"description":"ตัวแปรหรือกลุ่มตัวแปรที่รับรายการปัจจุบัน ไม่รองรับตัวรับแบบ *rest","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"iterable","type":"Iterable","defaultValue":null,"description":"แหล่งข้อมูลที่วนลูปได้ เช่น สตริง คอลเลกชัน หรือ generator หากเป็น dictionary จะได้คีย์","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"condition","type":"Boolean","defaultValue":"True","description":"Optional filter checked before appending.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"}],"returnType":"list","returnDescription":"รายการที่ไม่แน่นอนใหม่พร้อมรายการที่ตรงกันตามลำดับการวนซ้ำ","example":"values = [1, 2, 3, 4]\nevens = [x for x in values if x % 2 == 0]","aliases":[],"group":"FLOW"},{"key":"class-list-creation-method-range-source","kind":"CREATION_METHOD","parentKey":"class-list","name":"range_source","signature":"range(stop, /) | range(start, stop, step=1, /)","description":"สร้างรายการจำนวนเต็มใหม่สำหรับลูป ตัวนับ และช่วงตัวเลข","behavior":"สร้างรายการจำนวนเต็มใหม่สำหรับลูป ตัวนับ และช่วงตัวเลข","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"start","type":"Number","defaultValue":"0","description":"Start value (inclusive).","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"},{"name":"stop","type":"Number","defaultValue":null,"description":"End value (exclusive).","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"step","type":"Number","defaultValue":"1","description":"จำนวนที่เพิ่มเพื่อสร้างรายการถัดไป ค่าติดลบนับถอยหลัง ส่วน 0 ทำให้เกิดข้อผิดพลาด หากทิศทางของ step ห่างจาก stop จะได้ผลลัพธ์ว่าง","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"}],"returnType":"list[Int]","returnDescription":"รายการจำนวนเต็มใหม่","example":"numbers = range(5)         # คืนค่า [0, 1, 2, 3, 4]\nevens = range(0, 10, 2)   # คืนค่า [0, 2, 4, 6, 8]","aliases":[],"group":"FLOW"},{"key":"class-list-method-length","kind":"METHOD","parentKey":"class-list","name":"length","signature":"len(list, /)","description":"นับจำนวนรายการที่อยู่ในรายการ","behavior":"นับจำนวนรายการที่อยู่ในรายการ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"list","type":"list","defaultValue":null,"description":"The list to count.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"จำนวนรายการในรายการ","example":"numbers = range(3, 8)     # คืนค่า [3, 4, 5, 6, 7]\ncount = len(numbers)      # คืนค่า 5","aliases":[],"group":"FLOW"},{"key":"class-list-method-index-access","kind":"METHOD","parentKey":"class-list","name":"index_access","signature":"list[index]","description":"อ่านหนึ่งรายการตามตำแหน่ง: 0 คือรายการแรก -1 คือรายการสุดท้าย และดัชนีติดลบอื่นนับจากท้าย","behavior":"อ่านหนึ่งรายการตามตำแหน่ง: 0 คือรายการแรก -1 คือรายการสุดท้าย และดัชนีติดลบอื่นนับจากท้าย","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"list","type":"list","defaultValue":null,"description":"The source list.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"index","type":"Int","defaultValue":null,"description":"ตำแหน่งรายการ: 0 คือรายการแรก และ -1 คือรายการสุดท้าย","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"รายการที่ตำแหน่งนั้น เกิด IndexError เมื่อดัชนีอยู่นอกช่วงของรายการ","example":"numbers = range(10, 15)   # คืนค่า [10, 11, 12, 13, 14]\nfirst = numbers[0]        # คืนค่า 10\nthird = numbers[2]        # คืนค่า 12\nlast = numbers[-1]        # คืนค่า 14","aliases":[],"group":"FLOW"},{"key":"class-list-method-slice","kind":"METHOD","parentKey":"class-list","name":"slice","signature":"list[start:end[:step]]","description":"คืน list ใหม่ตั้งแต่ start จนถึงก่อน end ดัชนีติดลบนับจากท้าย หากไม่ระบุขอบเขต จะเลือกทั้ง list ตามทิศทางของ step คอลเลกชันที่ซ้อนอยู่ยังใช้ร่วมกัน","behavior":"คืน list ใหม่ตั้งแต่ start จนถึงก่อน end ดัชนีติดลบนับจากท้าย หากไม่ระบุขอบเขต จะเลือกทั้ง list ตามทิศทางของ step คอลเลกชันที่ซ้อนอยู่ยังใช้ร่วมกัน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"start","type":"Int","defaultValue":"start of list","description":"First item index to include.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"},{"name":"end","type":"Int","defaultValue":"end of list","description":"Stop before this item index.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"},{"name":"step","type":"Int","defaultValue":"1","description":"Distance between items. Cannot be 0; negative values read backward.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"}],"returnType":"list","returnDescription":"ส่วนรายการที่ไม่แน่นอนใหม่ ถูกบีบให้อยู่ในช่วงที่มีอยู่","example":"numbers = [0, 1, 2, 3, 4]\nmiddle = numbers[1:4]     # คืนค่า [1, 2, 3]\ntail = numbers[-2:]       # คืนค่า [3, 4]\nreverse = numbers[::-1]   # คืนค่า [4, 3, 2, 1, 0]","aliases":[],"group":"FLOW"},{"key":"class-list-method-index-assignment","kind":"METHOD","parentKey":"class-list","name":"index_assignment","signature":"list[index] = value","description":"แทนที่รายการที่มีอยู่หนึ่งรายการด้วยดัชนี ดัชนีเชิงลบนับจากจุดสิ้นสุด ดัชนีจะต้องอยู่ในรายการอยู่แล้ว","behavior":"แทนที่รายการที่มีอยู่หนึ่งรายการด้วยดัชนี ดัชนีเชิงลบนับจากจุดสิ้นสุด ดัชนีจะต้องอยู่ในรายการอยู่แล้ว","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"list","type":"list","defaultValue":null,"description":"The mutable list to update.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"index","type":"Int","defaultValue":null,"description":"Item index that already exists. Use -1 for the last item.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"},{"name":"value","type":"Any?","defaultValue":null,"description":"New value to store at that position.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง รายการได้รับการอัปเดตในสถานที่","example":"numbers = [12, 12, 21, 3, 2, 1]\nnumbers[4] = 3            # numbers กลายเป็น [12, 12, 21, 3, 3, 1]","aliases":[],"group":"FLOW"},{"key":"class-list-method-destructuring-assignment","kind":"METHOD","parentKey":"class-list","name":"destructuring_assignment","signature":"a, b = list","description":"กำหนดรายการใน list ให้ตัวแปรจากซ้ายไปขวา จำนวนตัวแปรต้องเท่ากับจำนวนรายการ มิฉะนั้นจะแจ้งข้อผิดพลาด กลุ่มตัวแปรซ้อนกันได้ แต่ไม่รองรับ *rest","behavior":"กำหนดรายการใน list ให้ตัวแปรจากซ้ายไปขวา จำนวนตัวแปรต้องเท่ากับจำนวนรายการ มิฉะนั้นจะแจ้งข้อผิดพลาด กลุ่มตัวแปรซ้อนกันได้ แต่ไม่รองรับ *rest","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"a, b","type":"Targets","defaultValue":null,"description":"ตัวแปรที่รับรายการ จำนวนต้องเท่ากับความยาว list","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"list","type":"list","defaultValue":null,"description":"Source list to unpack.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง เป้าหมายได้รับรายการจากซ้ายไปขวา","example":"point = [500, 900]\nx, y = point","aliases":[],"group":"FLOW"},{"key":"class-list-method-append","kind":"METHOD","parentKey":"class-list","name":"append","signature":"list.append(value, /)","description":"เพิ่มหนึ่งรายการใหม่ต่อท้ายรายการ","behavior":"เพิ่มหนึ่งรายการใหม่ต่อท้ายรายการ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"The value to add.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง รายการได้รับการอัปเดตในสถานที่","example":"numbers = [2, 0]\nnumbers.append(3)\nlast = numbers[-1]        # คืนค่า 3","aliases":[],"group":"FLOW"},{"key":"class-list-method-extend","kind":"METHOD","parentKey":"class-list","name":"extend","signature":"list.extend(iterable, /)","description":"เพิ่มแต่ละรายการจากแหล่งข้อมูลที่วนลูปได้ต่อท้าย list นี้ โดยคงลำดับต้นทาง","behavior":"เพิ่มแต่ละรายการจากแหล่งข้อมูลที่วนลูปได้ต่อท้าย list นี้ โดยคงลำดับต้นทาง","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","defaultValue":null,"description":"ค่าต้นทางที่รายการภายในจะถูกเพิ่มต่อท้าย","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง รายการเติบโตขึ้น","example":"numbers = [1]\nnumbers.extend([2, 3])\ncount = len(numbers)      # คืนค่า 3","aliases":[],"group":"FLOW"},{"key":"class-list-method-insert","kind":"METHOD","parentKey":"class-list","name":"insert","signature":"list.insert(index, value, /)","description":"แทรกรายการก่อนตำแหน่งที่ระบุ ตำแหน่งเริ่มที่ 0 ดัชนีติดลบนับจากท้าย ดัชนีที่อยู่ก่อน list จะแทรกที่ต้น ส่วนดัชนีที่เกินท้ายจะแทรกที่ท้าย","behavior":"แทรกรายการก่อนตำแหน่งที่ระบุ ตำแหน่งเริ่มที่ 0 ดัชนีติดลบนับจากท้าย ดัชนีที่อยู่ก่อน list จะแทรกที่ต้น ส่วนดัชนีที่เกินท้ายจะแทรกที่ท้าย","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"index","type":"Int","defaultValue":null,"description":"ตำแหน่งที่จะแทรกค่าก่อนหน้านั้น","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"value","type":"Any?","defaultValue":null,"description":"ค่าที่จะแทรก","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง รายการได้รับการอัปเดตในสถานที่","example":"numbers = [1, 3]\nnumbers.insert(1, 2)      # numbers กลายเป็น [1, 2, 3]","aliases":[],"group":"FLOW"},{"key":"class-list-method-remove","kind":"METHOD","parentKey":"class-list","name":"remove","signature":"list.remove(value, /)","description":"ลบรายการแรกที่มีค่าตรงกับค่าที่กำหนด","behavior":"ลบรายการแรกที่มีค่าตรงกับค่าที่กำหนด","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Value to find and remove from the list.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง เพิ่ม ValueError เมื่อไม่พบค่า","example":"numbers = [1, 2, 2, 3]\nnumbers.remove(2)         # numbers กลายเป็น [1, 2, 3]","aliases":[],"group":"FLOW"},{"key":"class-list-method-pop","kind":"METHOD","parentKey":"class-list","name":"pop","signature":"list.pop(index=-1, /)","description":"ลบหนึ่งรายการออกจาก list แล้วส่งค่านั้นกลับมา หากไม่ระบุดัชนีจะลบรายการสุดท้าย","behavior":"ลบหนึ่งรายการออกจาก list แล้วส่งค่านั้นกลับมา หากไม่ระบุดัชนีจะลบรายการสุดท้าย","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"index","type":"Int","defaultValue":"-1","description":"ดัชนีที่ต้องการลบแบบไม่บังคับ ดัชนีติดลบนับจากท้ายรายการ","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"รายการที่ถูกลบ เกิด IndexError เมื่อ list ว่างหรือดัชนีอยู่นอกช่วงของรายการ","example":"numbers = [2, 0, 3]\nremoved = numbers.pop()   # คืนค่า 3\nfirst = numbers.pop(0)    # คืนค่า 2","aliases":[],"group":"FLOW"},{"key":"class-list-method-clear","kind":"METHOD","parentKey":"class-list","name":"clear","signature":"list.clear()","description":"ลบทุกรายการออกจากรายการ","behavior":"ลบทุกรายการออกจากรายการ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง รายการจะว่างเปล่า","example":"numbers = [2, 0, 3]\nnumbers.clear()\ntext(str(len(numbers)))   # คืนค่า 0","aliases":[],"group":"FLOW"},{"key":"class-list-method-index","kind":"METHOD","parentKey":"class-list","name":"index","signature":"list.index(value, start=0, stop=len(list), /)","description":"ส่งคืนดัชนีแรกที่รายการเท่ากับ value ภายในขอบเขต start และ stop ที่เลือกได้","behavior":"ส่งคืนดัชนีแรกที่รายการเท่ากับ value ภายในขอบเขต start และ stop ที่เลือกได้","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"ค่าที่ต้องการค้นหา","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int","defaultValue":"0","description":"ตำแหน่งแรกที่ค้นหา โดยรวมตำแหน่งนี้ด้วย ตำแหน่งเริ่มที่ 0 ค่าติดลบนับจากท้าย","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(list)","description":"หยุดก่อนตำแหน่งนี้ ค่าติดลบนับจากท้าย","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"ดัชนีที่ตรงกัน เกิด ValueError เมื่อไม่พบค่า","example":"numbers = [1, 2, 1, 3]\nfirst_one = numbers.index(1)       # คืนค่า 0\nlater_one = numbers.index(1, 1)    # คืนค่า 2","aliases":[],"group":"FLOW"},{"key":"class-list-method-count","kind":"METHOD","parentKey":"class-list","name":"count","signature":"list.count(value, /)","description":"นับจำนวนรายการที่เท่ากับค่าที่กำหนด","behavior":"นับจำนวนรายการที่เท่ากับค่าที่กำหนด","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"ค่าที่ต้องการนับ","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"จำนวนรายการที่ตรงกัน","example":"numbers = [1, 2, 1, 3]\nones = numbers.count(1)   # คืนค่า 2","aliases":[],"group":"FLOW"},{"key":"class-list-method-sort","kind":"METHOD","parentKey":"class-list","name":"sort","signature":"list.sort(*, key=None, reverse=False)","description":"เรียง list เดิมจากน้อยไปมาก ค่าที่เปรียบเทียบแล้วเท่ากันคงลำดับเดิม ค่าต้องเปรียบเทียบกันได้: ตัวเลขและบูลีน สตริง หรือ list/tuple ชนิดเดียวกันที่มีรายการเปรียบเทียบกันได้ หากผสมชนิดที่เข้ากันไม่ได้จะแจ้งข้อผิดพลาด","behavior":"เรียง list เดิมจากน้อยไปมาก ค่าที่เปรียบเทียบแล้วเท่ากันคงลำดับเดิม ค่าต้องเปรียบเทียบกันได้: ตัวเลขและบูลีน สตริง หรือ list/tuple ชนิดเดียวกันที่มีรายการเปรียบเทียบกันได้ หากผสมชนิดที่เข้ากันไม่ได้จะแจ้งข้อผิดพลาด","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"ประมวลผลค่าในโฟลว์ปัจจุบัน ฟังก์ชัน key ทำงานที่นั่นด้วย การรอและการเปลี่ยนค่าของมันเกิดก่อนคืนค่า"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Callable?","defaultValue":"None","description":"ฟังก์ชันเสริมที่เรียกหนึ่งครั้งต่อรายการ เพื่อหาค่าที่ใช้เรียงลำดับ หากเป็น None จะเปรียบเทียบรายการเอง","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"reverse","type":"Boolean","defaultValue":"False","description":"เมื่อเป็น true จะเรียงจากค่ามากไปน้อย","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"None","returnDescription":"ไม่มีค่าที่ส่งคืนโดยตรง list จะถูกเรียงลำดับใหม่ในที่เดิม","example":"numbers = [3, 1, 2]\nnumbers.sort()\ntext(str(numbers))        # คืนค่า [1, 2, 3]","aliases":[],"group":"FLOW"},{"key":"class-list-method-reverse","kind":"METHOD","parentKey":"class-list","name":"reverse","signature":"list.reverse()","description":"กลับลำดับ list ในที่เดิม","behavior":"กลับลำดับ list ในที่เดิม","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"ไม่มีค่าที่ส่งคืนโดยตรง ลำดับของ list จะถูกกลับในที่เดิม","example":"numbers = [1, 2, 3]\nnumbers.reverse()         # numbers กลายเป็น [3, 2, 1]","aliases":[],"group":"FLOW"},{"key":"class-list-method-copy","kind":"METHOD","parentKey":"class-list","name":"copy","signature":"list.copy()","description":"คืน list ใหม่ที่มีรายการเดิม การเพิ่ม ลบ หรือแทนที่รายการในสำเนาไม่เปลี่ยนต้นฉบับ แต่คอลเลกชันที่ซ้อนอยู่ยังใช้ร่วมกัน","behavior":"คืน list ใหม่ที่มีรายการเดิม การเพิ่ม ลบ หรือแทนที่รายการในสำเนาไม่เปลี่ยนต้นฉบับ แต่คอลเลกชันที่ซ้อนอยู่ยังใช้ร่วมกัน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list","returnDescription":"list ใหม่ โดยไม่คัดลอกคอลเลกชันที่ซ้อนอยู่","example":"numbers = [1, 2]\ncopied = numbers.copy()\ncopied.append(3)\ncount = len(numbers)      # คืนค่า 2","aliases":[],"group":"FLOW"},{"key":"class-list-method-for-loop","kind":"METHOD","parentKey":"class-list","name":"for_loop","signature":"for item in list:","description":"วนซ้ำรายการต่างๆ ตามลำดับจากซ้ายไปขวา","behavior":"วนซ้ำรายการต่างๆ ตามลำดับจากซ้ายไปขวา","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"item","type":"Any","defaultValue":null,"description":"Current item inside the loop.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"list","type":"list","defaultValue":null,"description":"The list to iterate.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง ลูปจะรันเนื้อหาหนึ่งครั้งต่อรายการ","example":"steps = range(1, 4)      # คืนค่า [1, 2, 3]\nfor step in steps:\n    wait(step * 100)      # คืนค่า None","aliases":[],"group":"FLOW"},{"key":"class-list-method-truthy-check","kind":"METHOD","parentKey":"class-list","name":"truthy_check","signature":"if list | if not list","description":"ตรวจสอบว่ารายการมีอย่างน้อยหนึ่งรายการหรือไม่ รายการว่างจะถือเป็นเท็จ","behavior":"ตรวจสอบว่ารายการมีอย่างน้อยหนึ่งรายการหรือไม่ รายการว่างจะถือเป็นเท็จ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"list","type":"list","defaultValue":null,"description":"The list used in the condition.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean condition","returnDescription":"จริงเมื่อรายการไม่ว่างเปล่า เท็จเมื่อรายการว่างเปล่า","example":"numbers = range(0)        # คืนค่า []\nif not numbers:\n    text(\"No items\")      # คืนค่า None","aliases":[],"group":"FLOW"},{"key":"class-tuple","kind":"COLLECTION","parentKey":null,"name":"tuple","signature":"tuple(iterable=(), /)\n(value1, value2, ...)","description":"เก็บรายการตามลำดับและมีค่าซ้ำได้ แต่เพิ่ม ลบ หรือแทนที่หลังสร้างไม่ได้ list หรือ dictionary ที่ซ้อนอยู่ยังเปลี่ยนได้ ในเงื่อนไข tuple ว่างเป็น false และ tuple ที่มีรายการเป็น true","behavior":"เก็บรายการตามลำดับและมีค่าซ้ำได้ แต่เพิ่ม ลบ หรือแทนที่หลังสร้างไม่ได้ list หรือ dictionary ที่ซ้อนอยู่ยังเปลี่ยนได้ ในเงื่อนไข tuple ว่างเป็น false และ tuple ที่มีรายการเป็น true","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"offset = (0, 1)\nx = offset[0]\ny = offset[1]\nif 1 in offset:\n    text(\"offset ready\")","aliases":[],"group":null},{"key":"class-tuple-creation-method-constructor","kind":"CREATION_METHOD","parentKey":"class-tuple","name":"constructor","signature":"tuple()\ntuple(iterable, /)","description":"สร้าง tuple ว่าง หรือคัดลอกรายการจากแหล่งข้อมูลที่วนลูปได้เป็น tuple คอลเลกชันที่ซ้อนอยู่ยังใช้ร่วมกับต้นทาง","behavior":"สร้าง tuple ว่าง หรือคัดลอกรายการจากแหล่งข้อมูลที่วนลูปได้เป็น tuple คอลเลกชันที่ซ้อนอยู่ยังใช้ร่วมกับต้นทาง","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","defaultValue":"()","description":"แหล่งข้อมูลเสริมที่วนลูปได้ เช่น สตริง list หรือ generator","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"}],"returnType":"tuple","returnDescription":"ทูเพิลแบบอ่านอย่างเดียวใหม่","example":"coords = (120, 340)\ncopy = tuple(coords)","aliases":[],"group":"FLOW"},{"key":"class-tuple-creation-method-literal","kind":"CREATION_METHOD","parentKey":"class-tuple","name":"literal","signature":"(value1, value2, ...)","description":"สร้าง tuple ด้วยรายการที่คั่นด้วยจุลภาค ใช้ (value,) สำหรับรายการเดียว ส่วน (value) เพียงอย่างเดียวไม่ใช่ tuple","behavior":"สร้าง tuple ด้วยรายการที่คั่นด้วยจุลภาค ใช้ (value,) สำหรับรายการเดียว ส่วน (value) เพียงอย่างเดียวไม่ใช่ tuple","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Each item written inside tuple parentheses.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"tuple","returnDescription":"tuple ใหม่รักษาลำดับตามตัวอักษร","example":"offset = (0, 1)\nclick(Point(500, 900), offset=offset)","aliases":[],"group":"FLOW"},{"key":"class-tuple-method-length","kind":"METHOD","parentKey":"class-tuple","name":"length","signature":"len(tuple, /)","description":"นับจำนวนรายการในทูเพิล","behavior":"นับจำนวนรายการในทูเพิล","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"tuple","type":"tuple","defaultValue":null,"description":"The tuple to count.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"จำนวนรายการทูเพิล","example":"offset = (0, 1)\ncount = len(offset)      # คืนค่า 2","aliases":[],"group":"FLOW"},{"key":"class-tuple-method-index-access","kind":"METHOD","parentKey":"class-tuple","name":"index_access","signature":"tuple[index]","description":"อ่านรายการ tuple ตามตำแหน่ง: 0 คือรายการแรก -1 คือรายการสุดท้าย และดัชนีติดลบอื่นนับจากท้าย","behavior":"อ่านรายการ tuple ตามตำแหน่ง: 0 คือรายการแรก -1 คือรายการสุดท้าย และดัชนีติดลบอื่นนับจากท้าย","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"tuple","type":"tuple","defaultValue":null,"description":"Source tuple.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"index","type":"Int","defaultValue":null,"description":"ตำแหน่งรายการ: 0 คือรายการแรก และ -1 คือรายการสุดท้าย","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"รายการที่ตำแหน่งนั้น หากอยู่นอก tuple จะแจ้ง IndexError","example":"pair = (10, 20)\nx = pair[0]              # คืนค่า 10\ny = pair[-1]             # คืนค่า 20","aliases":[],"group":"FLOW"},{"key":"class-tuple-method-slice","kind":"METHOD","parentKey":"class-tuple","name":"slice","signature":"tuple[start:end[:step]]","description":"คืน tuple ใหม่ตั้งแต่ start จนถึงก่อน end ดัชนีติดลบนับจากท้าย หากไม่ระบุขอบเขต จะเลือกทั้ง tuple ตามทิศทางของ step คอลเลกชันที่ซ้อนอยู่ยังใช้ร่วมกัน","behavior":"คืน tuple ใหม่ตั้งแต่ start จนถึงก่อน end ดัชนีติดลบนับจากท้าย หากไม่ระบุขอบเขต จะเลือกทั้ง tuple ตามทิศทางของ step คอลเลกชันที่ซ้อนอยู่ยังใช้ร่วมกัน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"start","type":"Int","defaultValue":"start of tuple","description":"First item index to include.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"},{"name":"end","type":"Int","defaultValue":"end of tuple","description":"Stop before this item index.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"},{"name":"step","type":"Int","defaultValue":"1","description":"Distance between items. Cannot be 0; negative values read backward.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"}],"returnType":"tuple","returnDescription":"ชิ้นทูเพิลใหม่ ยึดเข้ากับช่วงที่มีอยู่","example":"values = (0, 1, 2, 3, 4)\nmiddle = values[1:4]     # คืนค่า (1, 2, 3)\nreverse = values[::-1]   # คืนค่า (4, 3, 2, 1, 0)","aliases":[],"group":"FLOW"},{"key":"class-tuple-method-destructuring-assignment","kind":"METHOD","parentKey":"class-tuple","name":"destructuring_assignment","signature":"x, y = tuple","description":"กำหนดรายการใน tuple ให้ตัวแปรจากซ้ายไปขวา จำนวนตัวแปรต้องเท่ากับจำนวนรายการ มิฉะนั้นจะแจ้งข้อผิดพลาด กลุ่มตัวแปรซ้อนกันได้ แต่ไม่รองรับ *rest","behavior":"กำหนดรายการใน tuple ให้ตัวแปรจากซ้ายไปขวา จำนวนตัวแปรต้องเท่ากับจำนวนรายการ มิฉะนั้นจะแจ้งข้อผิดพลาด กลุ่มตัวแปรซ้อนกันได้ แต่ไม่รองรับ *rest","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"x, y","type":"Targets","defaultValue":null,"description":"ตัวแปรที่รับรายการ จำนวนต้องเท่ากับความยาว tuple","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"tuple","type":"tuple","defaultValue":null,"description":"Source tuple to unpack.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง เป้าหมายได้รับไอเท็มทูเพิลจากซ้ายไปขวา","example":"label, (x, y) = (\"target\", (500, 900))","aliases":[],"group":"FLOW"},{"key":"class-tuple-method-index-method","kind":"METHOD","parentKey":"class-tuple","name":"index_method","signature":"tuple.index(value, start=0, stop=len(tuple), /)","description":"คืนตำแหน่งแรกที่ตรงกันในขอบเขตที่เลือก หรือแจ้ง ValueError หากไม่พบค่า","behavior":"คืนตำแหน่งแรกที่ตรงกันในขอบเขตที่เลือก หรือแจ้ง ValueError หากไม่พบค่า","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Value that must exist in the tuple.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int","defaultValue":"0","description":"ตำแหน่งแรกที่ค้นหา เริ่มที่ 0 ค่าติดลบนับจากท้าย ขอบเขตที่เกินจะถูกจำกัดให้อยู่ในช่วงที่มี","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(tuple)","description":"หยุดค้นหาก่อนตำแหน่งนี้ ค่าติดลบนับจากท้าย ขอบเขตที่เกินจะถูกจำกัดให้อยู่ในช่วงที่มี","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"First matching item index.","example":"pair = (\"farm\", \"pvp\")\nindex = pair.index(\"pvp\")","aliases":[],"group":"FLOW"},{"key":"class-tuple-method-count-method","kind":"METHOD","parentKey":"class-tuple","name":"count_method","signature":"tuple.count(value, /)","description":"Count matching tuple items.","behavior":"Count matching tuple items.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"ค่าที่ต้องการนับ","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"Number of matches.","example":"pair = (\"farm\", \"farm\", \"pvp\")\ncount = pair.count(\"farm\")","aliases":[],"group":"FLOW"},{"key":"class-tuple-method-for-loop","kind":"METHOD","parentKey":"class-tuple","name":"for_loop","signature":"for item in tuple:","description":"วนซ้ำรายการทูเพิลจากซ้ายไปขวา","behavior":"วนซ้ำรายการทูเพิลจากซ้ายไปขวา","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"item","type":"Any","defaultValue":null,"description":"Current tuple item in loop.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"tuple","type":"tuple","defaultValue":null,"description":"tuple to iterate.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง","example":"offset = (0, 1)\nfor item in offset:\n    text(str(item))","aliases":[],"group":"FLOW"},{"key":"class-motiontracker","kind":"CLASS","parentKey":null,"name":"MotionTracker","signature":"MotionTracker(region=None, exclude=None, max_displacement=80, max_gap_ms=850, max_frame_age_ms=250)","description":"ติดตามการเลื่อนของพื้นหลังระหว่างเฟรมหน้าจอด้วย OpenCV แบบหลายบริเวณ ไม่ตรวจจับผู้เล่นหรือหาตำแหน่งบนแผนที่ ให้ยกเว้น HUD และตัวละคร และจัดการซูมเกมภายนอกด้วยการจับคู่เทมเพลตและสเกล หากสงสัยว่ามีการซูมหรือหมุนจะได้ LOST ไม่ใช่ค่าประมาณซูม การสร้างไม่จับภาพ และแต่ละ flow เปิด tracker ได้ไม่เกิน 16 ตัว.","behavior":"ติดตามการเลื่อนของพื้นหลังระหว่างเฟรมหน้าจอด้วย OpenCV แบบหลายบริเวณ ไม่ตรวจจับผู้เล่นหรือหาตำแหน่งบนแผนที่ ให้ยกเว้น HUD และตัวละคร และจัดการซูมเกมภายนอกด้วยการจับคู่เทมเพลตและสเกล หากสงสัยว่ามีการซูมหรือหมุนจะได้ LOST ไม่ใช่ค่าประมาณซูม การสร้างไม่จับภาพ และแต่ละ flow เปิด tracker ได้ไม่เกิน 16 ตัว.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[{"name":"region","type":"Region | None","defaultValue":"None","description":"สี่เหลี่ยมติดตามเป็นพิกเซลหน้าจอ อยู่ภายในหน้าจอปัจจุบันทั้งหมด มีความกว้างและสูงเป็นจำนวนจำกัดที่เป็นบวก None เลือกทั้งหน้าจอ พิกัดถูกตรึงเมื่อสร้าง บริเวณที่เล็กหรือแคบเกินไปทำให้เกิดข้อผิดพลาด ให้เลือกบริเวณที่ใหญ่ขึ้น.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"exclude","type":"list | tuple | None","defaultValue":"None","description":"รายการ Region ที่ยกเว้น โดยตัดตามขอบเขตติดตาม แต่ละบริเวณต้องมีความกว้างและสูงเป็นจำนวนจำกัดที่เป็นบวก พิกัดถูกตรึงเมื่อสร้าง None ไม่ยกเว้นบริเวณใด ยกเว้นได้ไม่เกิน 32 Region.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"max_displacement","type":"Number (1..256)","defaultValue":"80","description":"ระยะเลื่อนสูงสุดต่อแกนเป็นพิกเซลหน้าจอ ต้องเป็นจำนวนจำกัด ค่าเริ่มต้น 80","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"max_gap_ms","type":"Number (1..5000)","defaultValue":"850","description":"ช่วงห่างสูงสุดระหว่างเฟรมเป็นจำนวนเต็มมิลลิวินาที ค่าเริ่มต้น 850","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"max_frame_age_ms","type":"Number (1..5000)","defaultValue":"250","description":"อายุเฟรมสูงสุดเป็นจำนวนเต็มมิลลิวินาที ค่าเริ่มต้น 250","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# ติดตามการเคลื่อนที่ของพื้นหลังระหว่างเฟรมที่จับภาพ\ntracker = MotionTracker()\nfirst = tracker.update()\nwait(100)\nresult = tracker.update()\nif result.status == \"TRACKED\":\n    print(result.dx, result.dy)\ntracker.close()","aliases":[],"group":null},{"key":"class-motiontracker-method-update","kind":"METHOD","parentKey":"class-motiontracker","name":"update","signature":"tracker.update()","description":"อ่านเฟรมปัจจุบันที่จับไว้และคืนผลการเคลื่อนที่ ต้องได้รับความยินยอมจับหน้าจอและพร้อมใช้งานแล้ว INITIALIZED ตั้งเฟรมอ้างอิง TRACKED คืนการเลื่อนที่ยอมรับ STALE ไม่เปลี่ยนเฟรมอ้างอิง LOST ล้างความต่อเนื่องเพื่อให้เฟรมใหม่ที่ใช้ได้ถัดไปเริ่มต้นใหม่ เรียกหลัง close จะเกิดข้อผิดพลาด STALE หมายถึงเฟรมซ้ำ อยู่ในอนาคต หรือเก่าเกินไปก่อนประมวลผล และไม่เปลี่ยนเฟรมอ้างอิง หากเฟรมเก่าเกินไประหว่างประมวลผล หรือ Pause ก่อนส่งมอบ จะได้ LOST โดย reason เป็น processing_frame_too_old และล้างความต่อเนื่อง.","behavior":"อ่านเฟรมปัจจุบันที่จับไว้และคืนผลการเคลื่อนที่ ต้องได้รับความยินยอมจับหน้าจอและพร้อมใช้งานแล้ว INITIALIZED ตั้งเฟรมอ้างอิง TRACKED คืนการเลื่อนที่ยอมรับ STALE ไม่เปลี่ยนเฟรมอ้างอิง LOST ล้างความต่อเนื่องเพื่อให้เฟรมใหม่ที่ใช้ได้ถัดไปเริ่มต้นใหม่ เรียกหลัง close จะเกิดข้อผิดพลาด STALE หมายถึงเฟรมซ้ำ อยู่ในอนาคต หรือเก่าเกินไปก่อนประมวลผล และไม่เปลี่ยนเฟรมอ้างอิง หากเฟรมเก่าเกินไประหว่างประมวลผล หรือ Pause ก่อนส่งมอบ จะได้ LOST โดย reason เป็น processing_frame_too_old และล้างความต่อเนื่อง.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"MotionResult","returnDescription":null,"example":null,"aliases":[],"group":"FLOW"},{"key":"class-motiontracker-method-reset","kind":"METHOD","parentKey":"class-motiontracker","name":"reset","signature":"tracker.reset()","description":"ล้างเฟรมอ้างอิงโดยยังใช้ตัวติดตามต่อได้ เรียกหลัง close จะเกิดข้อผิดพลาด","behavior":"ล้างเฟรมอ้างอิงโดยยังใช้ตัวติดตามต่อได้ เรียกหลัง close จะเกิดข้อผิดพลาด","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":null,"example":null,"aliases":[],"group":"FLOW"},{"key":"class-motiontracker-method-close","kind":"METHOD","parentKey":"class-motiontracker","name":"close","signature":"tracker.close()","description":"ปล่อยตัวติดตาม เรียกซ้ำได้อย่างปลอดภัย ระบบปล่อย handle เมื่อ macro หรือ flow จบ หยุด หรือเกิดข้อผิดพลาดด้วย ใช้ handle ซ้ำข้าม action ใน executor เดียวกันได้ และแยกจาก flow อื่น","behavior":"ปล่อยตัวติดตาม เรียกซ้ำได้อย่างปลอดภัย ระบบปล่อย handle เมื่อ macro หรือ flow จบ หยุด หรือเกิดข้อผิดพลาดด้วย ใช้ handle ซ้ำข้าม action ใน executor เดียวกันได้ และแยกจาก flow อื่น","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":null,"example":null,"aliases":[],"group":"FLOW"},{"key":"class-motionresult","kind":"READ_ONLY_CLASS","parentKey":null,"name":"MotionResult","signature":"MotionResult","description":"ผลลัพธ์อ่านอย่างเดียวจาก MotionTracker.update() การเลื่อนแสดงการเคลื่อนของพื้นหลังระหว่างเฟรม ไม่ใช่ตำแหน่งสัมบูรณ์ การติดตามไม่คลิก ส่งอินพุต อัปโหลด หรือบันทึกข้อมูล","behavior":"ผลลัพธ์อ่านอย่างเดียวจาก MotionTracker.update() การเลื่อนแสดงการเคลื่อนของพื้นหลังระหว่างเฟรม ไม่ใช่ตำแหน่งสัมบูรณ์ การติดตามไม่คลิก ส่งอินพุต อัปโหลด หรือบันทึกข้อมูล","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":false,"fields":["status","dx","dy","frame_id","captured_at_ms","dt_ms","age_ms","inliers","residual_px","reason"],"fieldDocs":[{"name":"status","type":"String","defaultValue":null,"description":"INITIALIZED ตั้งเฟรมอ้างอิง TRACKED มีการเลื่อนที่ยอมรับ STALE คือเฟรมซ้ำ เก่า หรืออยู่ในอนาคต LOST เกิดจากช่วงห่าง การเปลี่ยนรูปทรง เฟรมผิดลำดับ พื้นผิวไม่เพียงพอ หรือความกำกวม STALE ตรวจเฟรมก่อนประมวลผล ส่วนเฟรมที่เก่าเกินไประหว่างประมวลผลให้ LOST.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"dx","type":"Number | None","defaultValue":null,"description":"การเลื่อนแนวนอนของพื้นหลังเป็นพิกเซลหน้าจอความละเอียดเต็ม เฉพาะ TRACKED การเลื่อนไปซ้ายเป็นค่าลบ","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"dy","type":"Number | None","defaultValue":null,"description":"การเลื่อนแนวตั้งของพื้นหลังเป็นพิกเซลหน้าจอความละเอียดเต็ม เฉพาะ TRACKED","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"frame_id","type":"Number","defaultValue":null,"description":"รหัสเฉพาะของเฟรม ไม่เปลี่ยนเมื่ออ่านเฟรมเดิมจากแคชอีกครั้ง","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"captured_at_ms","type":"Number","defaultValue":null,"description":"เวลาที่ Android รับเฟรมตามนาฬิกา monotonic เป็นมิลลิวินาที ไม่ใช่เวลาแสดงผล","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"dt_ms","type":"Number | None","defaultValue":null,"description":"มิลลิวินาทีที่ผ่านไปตั้งแต่เฟรมอ้างอิง หากมี","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"age_ms","type":"Number","defaultValue":null,"description":"อายุสุดท้ายของเฟรมเป็นมิลลิวินาที","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"inliers","type":"Number","defaultValue":null,"description":"จำนวนบริเวณที่สนับสนุนการเคลื่อนที่ที่ยอมรับ","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"residual_px","type":"Number | None","defaultValue":null,"description":"ค่าคลาดเคลื่อนของการเคลื่อนที่เป็นพิกเซลหน้าจอ หากมี","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"reason","type":"String","defaultValue":null,"description":"เหตุผลของสถานะผลลัพธ์","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":null,"aliases":[],"group":null},{"key":"class-range","kind":"COLLECTION","parentKey":null,"name":"range","signature":"range(stop, /) | range(start, stop, step=1, /)","description":"ลำดับจำนวนเต็มที่เปลี่ยนแปลงไม่ได้ สร้างด้วย range() ใช้ลำดับซ้ำได้โดยไม่ต้องสร้างรายการทั้งหมด และใช้ list() เมื่อต้องการรายการ","behavior":"ลำดับจำนวนเต็มที่เปลี่ยนแปลงไม่ได้ สร้างด้วย range() ใช้ลำดับซ้ำได้โดยไม่ต้องสร้างรายการทั้งหมด และใช้ list() เมื่อต้องการรายการ","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["start","stop","step"],"fieldDocs":[{"name":"start","type":"Int","defaultValue":null,"description":"ขอบเขตเริ่มต้นที่นับรวม","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"stop","type":"Int","defaultValue":null,"description":"ขอบเขตสุดท้ายที่ไม่รวมอยู่ในลำดับ","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"step","type":"Int","defaultValue":null,"description":"ผลต่างระหว่างค่าที่อยู่ติดกัน","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"start","type":"Int","defaultValue":"0","description":"Start value (inclusive)","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":null,"description":"End value (exclusive)","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"step","type":"Int","defaultValue":"1","description":"ผลต่างระหว่างค่าที่อยู่ติดกัน ใช้ค่าลบเพื่อนับถอยหลัง; 0 ทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"}],"fieldExample":"numbers = range(2, 10, 2)\ntext(str(numbers.start))","constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"numbers = range(0, 10, 2)\ntext(str(list(numbers)))\ntext(str(numbers.index(4)))","aliases":[],"group":null},{"key":"class-range-method-count","kind":"METHOD","parentKey":"class-range","name":"count","signature":"range.count(value, /)","description":"คืนจำนวนครั้งที่ value ปรากฏ: 0 หรือ 1","behavior":"คืนจำนวนครั้งที่ value ปรากฏ: 0 หรือ 1","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"ค่าที่ต้องการค้นหา ค่าตัวเลขเปรียบเทียบตามค่า ดังนั้น 1.0 เท่ากับ 1","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":null,"example":"range(0, 10, 2).count(4)","aliases":[],"group":"FLOW"},{"key":"class-range-method-index","kind":"METHOD","parentKey":"class-range","name":"index","signature":"range.index(value, /)","description":"คืนตำแหน่งแรกของ value และแจ้ง ValueError หากไม่มีค่านั้น","behavior":"คืนตำแหน่งแรกของ value และแจ้ง ValueError หากไม่มีค่านั้น","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"ค่าที่ต้องการค้นหา ค่าตัวเลขเปรียบเทียบตามค่า ดังนั้น 1.0 เท่ากับ 1","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":null,"example":"range(0, 10, 2).index(4)","aliases":[],"group":"FLOW"},{"key":"class-set","kind":"COLLECTION","parentKey":null,"name":"set","signature":"set(iterable=(), /)","description":"เก็บค่าโดยไม่ซ้ำและเพิ่มหรือลบภายหลังได้ ค่าที่เท่ากันปรากฏครั้งเดียว: True, 1 และ 1.0 เท่ากัน รายการต้องใช้เป็นคีย์ dictionary ได้ จึงไม่รับ list, dictionary, set หรือ tuple ที่มีสิ่งเหล่านี้ อย่าพึ่งพาลำดับการวนลูป","behavior":"เก็บค่าโดยไม่ซ้ำและเพิ่มหรือลบภายหลังได้ ค่าที่เท่ากันปรากฏครั้งเดียว: True, 1 และ 1.0 เท่ากัน รายการต้องใช้เป็นคีย์ dictionary ได้ จึงไม่รับ list, dictionary, set หรือ tuple ที่มีสิ่งเหล่านี้ อย่าพึ่งพาลำดับการวนลูป","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"seen = {1, 2, 2}\nseen.add(3)\n\nif 2 in seen:\n    text(str(seen))","aliases":[],"group":null},{"key":"class-set-creation-method-constructor","kind":"CREATION_METHOD","parentKey":"class-set","name":"constructor","signature":"set()\nset(iterable, /)","description":"สร้าง set ว่าง หรือรวบรวมค่าจากแหล่งข้อมูลที่วนลูปได้ เช่น list หรือ generator โดยเก็บเฉพาะครั้งแรกของค่าที่เท่ากัน","behavior":"สร้าง set ว่าง หรือรวบรวมค่าจากแหล่งข้อมูลที่วนลูปได้ เช่น list หรือ generator โดยเก็บเฉพาะครั้งแรกของค่าที่เท่ากัน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","defaultValue":"()","description":"Optional source values to deduplicate into the new set.","suggestAsNamedArg":true,"requirement":"overload-dependent","callingMode":"positional-only"}],"returnType":"set","returnDescription":"ชุดที่ไม่แน่นอนใหม่","example":"seen = set()\nunique = set([1, 2, 2, 3])","aliases":[],"group":"FLOW"},{"key":"class-set-creation-method-literal","kind":"CREATION_METHOD","parentKey":"class-set","name":"literal","signature":"{1, 2, 3}","description":"สร้าง set โดยเขียนค่าในวงเล็บปีกกา ใช้ set() สำหรับ set ว่าง ส่วน {} สร้าง dictionary ว่าง","behavior":"สร้าง set โดยเขียนค่าในวงเล็บปีกกา ใช้ set() สำหรับ set ว่าง ส่วน {} สร้าง dictionary ว่าง","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Each value written inside the braces.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"set","returnDescription":"ชุดที่ไม่แน่นอนใหม่ที่เก็บหนึ่งสำเนาของแต่ละค่า","example":"unique = {1, 2, 2, 3}\ntext(str(unique))        # คืนค่า {1, 2, 3}","aliases":[],"group":"FLOW"},{"key":"class-set-creation-method-comprehension","kind":"CREATION_METHOD","parentKey":"class-set","name":"comprehension","signature":"{expr for target in iterable if condition}","description":"สร้าง set จากค่าที่ expr คำนวณขณะวนลูปผ่านแหล่งข้อมูล โดยลบค่าซ้ำ ใช้ if เพื่อกรองรายการ และใช้ for/if ได้หลายชุด ตัวแปรลูปอยู่เฉพาะในนิพจน์นี้","behavior":"สร้าง set จากค่าที่ expr คำนวณขณะวนลูปผ่านแหล่งข้อมูล โดยลบค่าซ้ำ ใช้ if เพื่อกรองรายการ และใช้ for/if ได้หลายชุด ตัวแปรลูปอยู่เฉพาะในนิพจน์นี้","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"expr","type":"Any?","defaultValue":null,"description":"Value calculated for each accepted item.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"target","type":"Name | destructuring target","defaultValue":null,"description":"ตัวแปรหรือกลุ่มตัวแปรที่รับรายการปัจจุบัน ไม่รองรับตัวรับแบบ *rest","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"iterable","type":"Iterable","defaultValue":null,"description":"แหล่งข้อมูลที่วนลูปได้ เช่น สตริง คอลเลกชัน หรือ generator หากเป็น dictionary จะได้คีย์","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"condition","type":"Boolean","defaultValue":"True","description":"Optional filter checked before adding a value.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"}],"returnType":"set","returnDescription":"ชุดที่ไม่แน่นอนใหม่","example":"values = [1, 2, 3, 4, 5]\nremainders = {x % 3 for x in values}","aliases":[],"group":"FLOW"},{"key":"class-set-method-length","kind":"METHOD","parentKey":"class-set","name":"length","signature":"len(set, /)","description":"นับจำนวนค่าที่ไม่ซ้ำในชุด","behavior":"นับจำนวนค่าที่ไม่ซ้ำในชุด","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"set","type":"set","defaultValue":null,"description":"The set to count.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"จำนวนค่าที่ตั้งไว้","example":"values = {1, 2, 2}\ncount = len(values)      # คืนค่า 2","aliases":[],"group":"FLOW"},{"key":"class-set-method-membership-operator","kind":"METHOD","parentKey":"class-set","name":"membership_operator","signature":"value in set","description":"ตรวจสอบว่ามีค่าอยู่ในชุดหรือไม่","behavior":"ตรวจสอบว่ามีค่าอยู่ในชุดหรือไม่","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Value to test.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"set","type":"set","defaultValue":null,"description":"set ที่จะค้นหาค่า","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"จริงเมื่อมีค่าอยู่ มิฉะนั้นจะเป็นเท็จ","example":"values = {1, 2, 3}\nif 2 in values:\n    text(\"ready\")","aliases":[],"group":"FLOW"},{"key":"class-set-method-add-method","kind":"METHOD","parentKey":"class-set","name":"add_method","signature":"set.add(value, /)","description":"เพิ่มหนึ่งค่าให้กับชุด ค่าที่มีอยู่จะถูกเก็บไว้เพียงครั้งเดียว","behavior":"เพิ่มหนึ่งค่าให้กับชุด ค่าที่มีอยู่จะถูกเก็บไว้เพียงครั้งเดียว","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Value to add.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง ชุดได้รับการปรับปรุงในสถานที่","example":"seen = set()\nseen.add(\"home\")","aliases":[],"group":"FLOW"},{"key":"class-set-method-discard-method","kind":"METHOD","parentKey":"class-set","name":"discard_method","signature":"set.discard(value, /)","description":"ลบค่าหากมีอยู่ ค่าที่หายไปจะถูกละเว้น","behavior":"ลบค่าหากมีอยู่ ค่าที่หายไปจะถูกละเว้น","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Value to remove if present.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง ชุดอาจมีการปรับปรุงในสถานที่","example":"seen = {\"home\", \"shop\"}\nseen.discard(\"shop\")","aliases":[],"group":"FLOW"},{"key":"class-set-method-remove-method","kind":"METHOD","parentKey":"class-set","name":"remove_method","signature":"set.remove(value, /)","description":"ลบค่าจาก set นี้ หรือแจ้ง KeyError หากไม่มีค่านั้น","behavior":"ลบค่าจาก set นี้ หรือแจ้ง KeyError หากไม่มีค่านั้น","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Value that must exist in the set.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง ชุดได้รับการปรับปรุงในสถานที่","example":"seen = {\"home\", \"shop\"}\nseen.remove(\"home\")","aliases":[],"group":"FLOW"},{"key":"class-set-method-pop-method","kind":"METHOD","parentKey":"class-set","name":"pop_method","signature":"set.pop()","description":"ลบและคืนค่าใดค่าหนึ่งจาก set นี้ หาก set ว่างจะแจ้ง KeyError","behavior":"ลบและคืนค่าใดค่าหนึ่งจาก set นี้ หาก set ว่างจะแจ้ง KeyError","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Any?","returnDescription":"Removed value.","example":"seen = {\"home\", \"shop\"}\nvalue = seen.pop()","aliases":[],"group":"FLOW"},{"key":"class-set-method-update-method","kind":"METHOD","parentKey":"class-set","name":"update_method","signature":"set.update(*iterables)","description":"เพิ่มค่าจากแหล่งข้อมูลที่วนลูปได้ลงใน set นี้ โดยเก็บค่าที่เท่ากันเพียงครั้งเดียว","behavior":"เพิ่มค่าจากแหล่งข้อมูลที่วนลูปได้ลงใน set นี้ โดยเก็บค่าที่เท่ากันเพียงครั้งเดียว","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterables","type":"Iterable","defaultValue":null,"description":"Sources to add.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง ชุดได้รับการปรับปรุงในสถานที่","example":"seen = {\"home\"}\nseen.update([\"shop\", \"home\"])","aliases":[],"group":"FLOW"},{"key":"class-set-method-union-method","kind":"METHOD","parentKey":"class-set","name":"union_method","signature":"set.union(*iterables)","description":"คืน set ใหม่ที่รวม set นี้กับแหล่งข้อมูลที่วนลูปได้ โดยไม่มีค่าซ้ำ set เดิมไม่เปลี่ยน","behavior":"คืน set ใหม่ที่รวม set นี้กับแหล่งข้อมูลที่วนลูปได้ โดยไม่มีค่าซ้ำ set เดิมไม่เปลี่ยน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterables","type":"Iterable","defaultValue":null,"description":"Sources to merge.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"}],"returnType":"set","returnDescription":"Merged set copy.","example":"a = {\"home\"}\nb = a.union([\"shop\"])","aliases":[],"group":"FLOW"},{"key":"class-set-method-intersection-method","kind":"METHOD","parentKey":"class-set","name":"intersection_method","signature":"set.intersection(*iterables)","description":"คืน set ใหม่ที่มีค่าจาก set นี้ซึ่งปรากฏในทุกแหล่งข้อมูลที่ส่งมา หากไม่ส่งแหล่งข้อมูลจะคืนสำเนา set เดิมไม่เปลี่ยน","behavior":"คืน set ใหม่ที่มีค่าจาก set นี้ซึ่งปรากฏในทุกแหล่งข้อมูลที่ส่งมา หากไม่ส่งแหล่งข้อมูลจะคืนสำเนา set เดิมไม่เปลี่ยน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterables","type":"Iterable","defaultValue":null,"description":"Sources to compare.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"}],"returnType":"set","returnDescription":"Intersection set copy.","example":"a = {\"home\", \"shop\"}\nb = a.intersection([\"shop\"])","aliases":[],"group":"FLOW"},{"key":"class-set-method-difference-method","kind":"METHOD","parentKey":"class-set","name":"difference_method","signature":"set.difference(*iterables)","description":"คืน set ใหม่ที่มีค่าจาก set นี้ซึ่งไม่ปรากฏในแหล่งข้อมูลใดที่ส่งมา หากไม่ส่งแหล่งข้อมูลจะคืนสำเนา set เดิมไม่เปลี่ยน","behavior":"คืน set ใหม่ที่มีค่าจาก set นี้ซึ่งไม่ปรากฏในแหล่งข้อมูลใดที่ส่งมา หากไม่ส่งแหล่งข้อมูลจะคืนสำเนา set เดิมไม่เปลี่ยน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterables","type":"Iterable","defaultValue":null,"description":"Sources to subtract.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"}],"returnType":"set","returnDescription":"Difference set copy.","example":"a = {\"home\", \"shop\"}\nb = a.difference([\"home\"])","aliases":[],"group":"FLOW"},{"key":"class-set-method-copy-method","kind":"METHOD","parentKey":"class-set","name":"copy_method","signature":"set.copy()","description":"คืน set ใหม่ที่มีค่าเดิม การเพิ่มหรือลบค่าในสำเนาไม่เปลี่ยนต้นฉบับ","behavior":"คืน set ใหม่ที่มีค่าเดิม การเพิ่มหรือลบค่าในสำเนาไม่เปลี่ยนต้นฉบับ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"set","returnDescription":"ชุดใหม่ที่มีค่าเดียวกัน","example":"seen = {1, 2}\ncopied = seen.copy()","aliases":[],"group":"FLOW"},{"key":"class-set-method-clear-method","kind":"METHOD","parentKey":"class-set","name":"clear_method","signature":"set.clear()","description":"ลบทุกค่าออกจากชุด","behavior":"ลบทุกค่าออกจากชุด","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง ชุดจะว่างเปล่า","example":"seen = {1, 2}\nseen.clear()","aliases":[],"group":"FLOW"},{"key":"class-set-method-for-loop","kind":"METHOD","parentKey":"class-set","name":"for_loop","signature":"for value in set:","description":"วนลูปผ่านแต่ละค่าหนึ่งครั้ง อย่าพึ่งพาลำดับใดโดยเฉพาะ","behavior":"วนลูปผ่านแต่ละค่าหนึ่งครั้ง อย่าพึ่งพาลำดับใดโดยเฉพาะ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Current set value in the loop.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"set","type":"set","defaultValue":null,"description":"set to iterate.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง การวนซ้ำจะทำงานหนึ่งครั้งต่อค่า","example":"values = {\"home\", \"shop\"}\nfor value in values:\n    text(value)","aliases":[],"group":"FLOW"},{"key":"class-set-method-truthy-check","kind":"METHOD","parentKey":"class-set","name":"truthy_check","signature":"if set | if not set","description":"ตรวจสอบว่าชุดมีค่าอย่างน้อยหนึ่งค่าหรือไม่ ชุดว่างจะถือเป็นเท็จ","behavior":"ตรวจสอบว่าชุดมีค่าอย่างน้อยหนึ่งค่าหรือไม่ ชุดว่างจะถือเป็นเท็จ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"set","type":"set","defaultValue":null,"description":"The set used in the condition.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean condition","returnDescription":"จริงเมื่อชุดไม่ว่างเปล่า เท็จเมื่อชุดว่างเปล่า","example":"seen = set()\nif not seen:\n    text(\"empty\")","aliases":[],"group":"FLOW"},{"key":"class-dict","kind":"COLLECTION","parentKey":null,"name":"dict","signature":"dict(mapping_or_pairs=(), /, **items)","description":"เก็บค่าภายใต้คีย์และอ่านด้วยคีย์ คีย์คงลำดับที่เพิ่ม การเขียนคีย์เดิมจะแทนที่ค่าโดยไม่ย้ายตำแหน่งคีย์ แต่ละคีย์มีหนึ่งค่า","behavior":"เก็บค่าภายใต้คีย์และอ่านด้วยคีย์ คีย์คงลำดับที่เพิ่ม การเขียนคีย์เดิมจะแทนที่ค่าโดยไม่ย้ายตำแหน่งคีย์ แต่ละคีย์มีหนึ่งค่า","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"settings = dict(mode=\"farm\", retries=3)\nmode = settings.get(\"mode\")   # คืนค่า farm\nkeys = settings.keys()\n\nfor key in settings:\n    text(str(settings[key]))   # คืนค่า None","aliases":[],"group":null},{"key":"class-dict-creation-method-constructor","kind":"CREATION_METHOD","parentKey":"class-dict","name":"constructor","signature":"dict()\ndict(mapping_or_pairs, /)\ndict(key=value, ...)","description":"สร้าง dictionary ว่าง หรือคัดลอกจาก dictionary อื่นหรือแหล่งข้อมูลคู่ (key, value) อาร์กิวเมนต์แบบระบุชื่อจะเพิ่มข้อมูลภายหลังและแทนที่คีย์ที่ตรงกัน ค่าที่ซ้อนอยู่ยังใช้ร่วมกับต้นทาง","behavior":"สร้าง dictionary ว่าง หรือคัดลอกจาก dictionary อื่นหรือแหล่งข้อมูลคู่ (key, value) อาร์กิวเมนต์แบบระบุชื่อจะเพิ่มข้อมูลภายหลังและแทนที่คีย์ที่ตรงกัน ค่าที่ซ้อนอยู่ยังใช้ร่วมกับต้นทาง","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"mapping_or_pairs","type":"dict | Iterable","defaultValue":"()","description":"dict หรือแหล่งข้อมูลที่วนอ่านได้ โดยแต่ละรายการต้องเป็น list หรือ tuple ที่มีสองส่วนพอดี: คีย์และค่า","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"},{"name":"key=value","type":"Any?","defaultValue":null,"description":"ข้อมูลที่เขียนแบบ key=value เพิ่มหลังข้อมูลจากต้นทาง และแทนที่ค่าของคีย์ที่ตรงกัน","suggestAsNamedArg":true,"requirement":"optional","callingMode":"variadic"}],"returnType":"dict","returnDescription":"พจนานุกรมที่ไม่แน่นอนใหม่","example":"settings = dict(mode=\"farm\", retries=3)\ncopied = dict(settings)\nfrom_pairs = dict([(\"mode\", \"pvp\")])","aliases":[],"group":"FLOW"},{"key":"class-dict-creation-method-literal","kind":"CREATION_METHOD","parentKey":"class-dict","name":"literal","signature":"{\"mode\": \"farm\", \"retries\": 3}","description":"สร้าง dictionary โดยเขียนคู่ key: value ในวงเล็บปีกกา หากคีย์ซ้ำจะใช้ค่าสุดท้าย","behavior":"สร้าง dictionary โดยเขียนคู่ key: value ในวงเล็บปีกกา หากคีย์ซ้ำจะใช้ค่าสุดท้าย","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"คีย์ที่ระบุค่า ใช้ตัวเลข สตริง และ tuple ของคีย์ที่ใช้ได้ แต่ใช้ list, dictionary หรือ set ไม่ได้ True, 1 และ 1.0 ระบุคีย์เดียวกัน","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"value","type":"Any?","defaultValue":null,"description":"Value stored for that key.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"dict","returnDescription":"พจนานุกรมใหม่ที่รักษาลำดับรายการตามตัวอักษร","example":"settings = {\n    \"mode\": \"farm\",\n    \"retries\": 3,\n    \"enabled\": True\n}","aliases":[],"group":"FLOW"},{"key":"class-dict-creation-method-comprehension","kind":"CREATION_METHOD","parentKey":"class-dict","name":"comprehension","signature":"{key: value for target in iterable if condition}","description":"สร้าง dictionary จากคู่ key: value ที่คำนวณขณะวนลูปผ่านแหล่งข้อมูล คีย์ซ้ำจะแทนที่ค่าก่อนหน้า ใช้ if เพื่อกรองรายการ และใช้ for/if ได้หลายชุด ตัวแปรลูปอยู่เฉพาะในนิพจน์นี้","behavior":"สร้าง dictionary จากคู่ key: value ที่คำนวณขณะวนลูปผ่านแหล่งข้อมูล คีย์ซ้ำจะแทนที่ค่าก่อนหน้า ใช้ if เพื่อกรองรายการ และใช้ for/if ได้หลายชุด ตัวแปรลูปอยู่เฉพาะในนิพจน์นี้","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"dict key calculated for each accepted item.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"value","type":"Any?","defaultValue":null,"description":"Value stored for that key.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"target","type":"Name | destructuring target","defaultValue":null,"description":"ตัวแปรหรือกลุ่มตัวแปรที่รับรายการปัจจุบัน ไม่รองรับตัวรับแบบ *rest","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"iterable","type":"Iterable","defaultValue":null,"description":"แหล่งข้อมูลที่วนลูปได้ เช่น สตริง คอลเลกชัน หรือ generator หากเป็น dictionary จะได้คีย์","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"condition","type":"Boolean","defaultValue":"True","description":"Optional filter checked before storing an entry.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"}],"returnType":"dict","returnDescription":"พจนานุกรมที่ไม่แน่นอนใหม่","example":"pairs = [(\"mode\", \"farm\"), (\"retries\", 3)]\nsettings = {key: value for key, value in pairs}","aliases":[],"group":"FLOW"},{"key":"class-dict-method-key-access","kind":"METHOD","parentKey":"class-dict","name":"key_access","signature":"dictionary[\"key\"]","description":"อ่านค่าที่เก็บภายใต้ key หากไม่มีคีย์จะแจ้ง KeyError ใช้ get() เมื่อต้องการค่าปริยาย","behavior":"อ่านค่าที่เก็บภายใต้ key หากไม่มีคีย์จะแจ้ง KeyError ใช้ get() เมื่อต้องการค่าปริยาย","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"dictionary","type":"dict","defaultValue":null,"description":"The source dictionary.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"key","type":"Any","defaultValue":null,"description":"Key to look up.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Any?","returnDescription":"ค่าที่เก็บ ซึ่งอาจเป็น None หากไม่มีคีย์จะแจ้ง KeyError","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nmode = settings[\"mode\"]        # คืนค่า farm\nmissing = settings.get(\"unknown\")  # คืนค่า None","aliases":[],"group":"FLOW"},{"key":"class-dict-method-key-assignment","kind":"METHOD","parentKey":"class-dict","name":"key_assignment","signature":"dictionary[key] = value","description":"เขียนหรือแทนที่รายการคีย์/ค่าหนึ่งรายการด้วยไวยากรณ์การกำหนดวงเล็บเหลี่ยม","behavior":"เขียนหรือแทนที่รายการคีย์/ค่าหนึ่งรายการด้วยไวยากรณ์การกำหนดวงเล็บเหลี่ยม","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"dictionary","type":"dict","defaultValue":null,"description":"The mutable dictionary to update.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"key","type":"Any","defaultValue":null,"description":"Key to write or replace.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"},{"name":"value","type":"Any?","defaultValue":null,"description":"Value to store for that key.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง พจนานุกรมได้รับการอัปเดตแล้ว","example":"settings = {\"mode\": \"farm\"}\nsettings[\"mode\"] = \"pvp\"","aliases":[],"group":"FLOW"},{"key":"class-dict-method-length","kind":"METHOD","parentKey":"class-dict","name":"length","signature":"len(dictionary, /)","description":"นับจำนวนคู่คีย์/ค่าในพจนานุกรม","behavior":"นับจำนวนคู่คีย์/ค่าในพจนานุกรม","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"dictionary","type":"dict","defaultValue":null,"description":"The dictionary to count.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"จำนวนรายการในพจนานุกรม","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\ncount = len(settings)          # คืนค่า 2","aliases":[],"group":"FLOW"},{"key":"class-dict-method-get-method","kind":"METHOD","parentKey":"class-dict","name":"get_method","signature":"dictionary.get(key, default=None, /)","description":"อ่านค่าตามคีย์และเลือกที่จะถอยกลับไปเป็นค่าเริ่มต้น","behavior":"อ่านค่าตามคีย์และเลือกที่จะถอยกลับไปเป็นค่าเริ่มต้น","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Key to look up.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"default","type":"Any?","defaultValue":"None","description":"Fallback value returned when the key is missing.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"ค่าที่เก็บไว้สำหรับคีย์นั้น หรือค่าเริ่มต้นที่ให้ไว้","example":"settings = {\"mode\": \"farm\"}\nmode = settings.get(\"mode\")           # คืนค่า farm\nretry = settings.get(\"retries\", 0)    # คืนค่า 0","aliases":[],"group":"FLOW"},{"key":"class-dict-method-items-method","kind":"METHOD","parentKey":"class-dict","name":"items_method","signature":"dictionary.items()","description":"คืน view ของ tuple (key, value) ตามลำดับที่เพิ่ม ซึ่งสะท้อนการเปลี่ยนแปลง dictionary ภายหลัง วนลูปผ่าน view หรือแปลงด้วย list() เพื่อใช้ดัชนี","behavior":"คืน view ของ tuple (key, value) ตามลำดับที่เพิ่ม ซึ่งสะท้อนการเปลี่ยนแปลง dictionary ภายหลัง วนลูปผ่าน view หรือแปลงด้วย list() เพื่อใช้ดัชนี","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict_items","returnDescription":"view แบบ dict_items ซึ่งอ่านด้วยดัชนีโดยตรงไม่ได้","example":"settings = {\"mode\": \"farm\"}\npairs = settings.items()","aliases":[],"group":"FLOW"},{"key":"class-dict-method-pop-method","kind":"METHOD","parentKey":"class-dict","name":"pop_method","signature":"dictionary.pop(key, /)\ndictionary.pop(key, default, /)","description":"ลบคีย์และคืนค่าของคีย์นั้น หากไม่มีคีย์ จะคืน default ที่ส่งมาอย่างชัดเจน รวมถึง None หากไม่ส่ง default จะแจ้ง KeyError","behavior":"ลบคีย์และคืนค่าของคีย์นั้น หากไม่มีคีย์ จะคืน default ที่ส่งมาอย่างชัดเจน รวมถึง None หากไม่ส่ง default จะแจ้ง KeyError","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Key to remove.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"default","type":"Any?","defaultValue":null,"description":"ค่าที่คืนเมื่อไม่มีคีย์ ใช้เฉพาะเมื่อส่งอาร์กิวเมนต์นี้ หากไม่ส่งและไม่มีคีย์จะแจ้ง KeyError","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"ค่าที่ลบ หรือ default ที่ส่งมาอย่างชัดเจนเมื่อไม่มีคีย์","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nremoved = settings.pop(\"retries\")","aliases":[],"group":"FLOW"},{"key":"class-dict-method-copy-method","kind":"METHOD","parentKey":"class-dict","name":"copy_method","signature":"dictionary.copy()","description":"คืน dictionary ใหม่ที่มีข้อมูลเดิม การเพิ่ม ลบ หรือแทนที่ข้อมูลไม่เปลี่ยนต้นฉบับ แต่คอลเลกชันที่ซ้อนอยู่ยังใช้ร่วมกัน","behavior":"คืน dictionary ใหม่ที่มีข้อมูลเดิม การเพิ่ม ลบ หรือแทนที่ข้อมูลไม่เปลี่ยนต้นฉบับ แต่คอลเลกชันที่ซ้อนอยู่ยังใช้ร่วมกัน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"dict ใหม่ โดยชุดข้อมูลที่ซ้อนอยู่จะไม่ถูกคัดลอก","example":"settings = {\"mode\": \"farm\"}\ncopied = settings.copy()","aliases":[],"group":"FLOW"},{"key":"class-dict-method-update-method","kind":"METHOD","parentKey":"class-dict","name":"update_method","signature":"dictionary.update(other=(), /, **items)","description":"เพิ่มข้อมูลลงใน dictionary นี้จาก dictionary อื่นหรือแหล่งข้อมูลคู่ (key, value) แล้วใช้ค่าจากอาร์กิวเมนต์แบบระบุชื่อ คีย์ที่ตรงกันจะถูกแทนที่ค่าโดยไม่ย้ายตำแหน่ง","behavior":"เพิ่มข้อมูลลงใน dictionary นี้จาก dictionary อื่นหรือแหล่งข้อมูลคู่ (key, value) แล้วใช้ค่าจากอาร์กิวเมนต์แบบระบุชื่อ คีย์ที่ตรงกันจะถูกแทนที่ค่าโดยไม่ย้ายตำแหน่ง","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"dict | Iterable","defaultValue":"()","description":"dict หรือแหล่งข้อมูลที่มี list หรือ tuple สองส่วน ได้แก่คีย์และค่า","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"items","type":"Any?","defaultValue":null,"description":"ข้อมูลที่เขียนแบบ key=value จะแทนที่ข้อมูลที่มีคีย์ตรงกันจาก other","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง พจนานุกรมได้รับการอัปเดตแล้ว","example":"settings = {\"mode\": \"farm\"}\nsettings.update([(\"retries\", 3)], mode=\"pvp\")","aliases":[],"group":"FLOW"},{"key":"class-dict-method-setdefault-method","kind":"METHOD","parentKey":"class-dict","name":"setdefault_method","signature":"dictionary.setdefault(key, default=None, /)","description":"Return an existing value, or store and return the default when the key is missing.","behavior":"Return an existing value, or store and return the default when the key is missing.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Key to read or create.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"default","type":"Any?","defaultValue":"None","description":"Value stored when the key is absent.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"Existing value or inserted default.","example":"settings = dict()\nmode = settings.setdefault(\"mode\", \"farm\")","aliases":[],"group":"FLOW"},{"key":"class-dict-method-keys-method","kind":"METHOD","parentKey":"class-dict","name":"keys_method","signature":"dictionary.keys()","description":"คืน view ของคีย์ตามลำดับที่เพิ่ม ซึ่งสะท้อนการเปลี่ยนแปลง dictionary ภายหลัง วนลูปผ่าน view หรือแปลงด้วย list() เพื่อใช้ดัชนี","behavior":"คืน view ของคีย์ตามลำดับที่เพิ่ม ซึ่งสะท้อนการเปลี่ยนแปลง dictionary ภายหลัง วนลูปผ่าน view หรือแปลงด้วย list() เพื่อใช้ดัชนี","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict_keys","returnDescription":"view แบบ dict_keys ซึ่งอ่านด้วยดัชนีโดยตรงไม่ได้","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nkeys = settings.keys()\nfirst_key = list(keys)[0]                 # คืนค่า mode","aliases":[],"group":"FLOW"},{"key":"class-dict-method-values-method","kind":"METHOD","parentKey":"class-dict","name":"values_method","signature":"dictionary.values()","description":"คืน view ของค่าตามลำดับที่เพิ่มคีย์ ซึ่งสะท้อนการเปลี่ยนแปลง dictionary ภายหลัง วนลูปผ่าน view หรือแปลงด้วย list() เพื่อใช้ดัชนี","behavior":"คืน view ของค่าตามลำดับที่เพิ่มคีย์ ซึ่งสะท้อนการเปลี่ยนแปลง dictionary ภายหลัง วนลูปผ่าน view หรือแปลงด้วย list() เพื่อใช้ดัชนี","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict_values","returnDescription":"view แบบ dict_values ซึ่งอ่านด้วยดัชนีโดยตรงไม่ได้","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nvalues = settings.values()\nlast_value = list(values)[-1]             # คืนค่า 3","aliases":[],"group":"FLOW"},{"key":"class-dict-method-clear-method","kind":"METHOD","parentKey":"class-dict","name":"clear_method","signature":"dictionary.clear()","description":"ลบคู่คีย์/ค่าทุกคู่ออกจากพจนานุกรม","behavior":"ลบคู่คีย์/ค่าทุกคู่ออกจากพจนานุกรม","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง พจนานุกรมว่างเปล่า","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nsettings.clear()\ntext(str(len(settings)))   # คืนค่า 0","aliases":[],"group":"FLOW"},{"key":"class-dict-method-for-loop","kind":"METHOD","parentKey":"class-dict","name":"for_loop","signature":"for key in dictionary:","description":"วนลูปผ่านคีย์ dictionary ตามลำดับที่เพิ่ม รวมถึงคีย์ที่เพิ่มหลังสร้าง","behavior":"วนลูปผ่านคีย์ dictionary ตามลำดับที่เพิ่ม รวมถึงคีย์ที่เพิ่มหลังสร้าง","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Current key inside the loop.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"dictionary","type":"dict","defaultValue":null,"description":"The dictionary to iterate.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง การวนซ้ำจะทำงานหนึ่งครั้งต่อคีย์","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nfor key in settings:\n    text(str(settings[key]))   # คืนค่า None","aliases":[],"group":"FLOW"},{"key":"class-dict-method-truthy-check","kind":"METHOD","parentKey":"class-dict","name":"truthy_check","signature":"if dictionary | if not dictionary","description":"ตรวจสอบว่าพจนานุกรมมีอย่างน้อยหนึ่งรายการหรือไม่ พจนานุกรมเปล่าจะถือเป็นเท็จ","behavior":"ตรวจสอบว่าพจนานุกรมมีอย่างน้อยหนึ่งรายการหรือไม่ พจนานุกรมเปล่าจะถือเป็นเท็จ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"dictionary","type":"dict","defaultValue":null,"description":"The dictionary used in the condition.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean condition","returnDescription":"จริงเมื่อพจนานุกรมไม่ว่างเปล่า เป็นเท็จ เมื่อพจนานุกรมว่างเปล่า","example":"settings = {}\nif not settings:\n    text(\"No settings\")       # คืนค่า None","aliases":[],"group":"FLOW"},{"key":"class-string","kind":"COLLECTION","parentKey":null,"name":"String","signature":"String","description":"เก็บข้อความที่เขียนในเครื่องหมายคำพูดหรือแปลงด้วย str(value) แก้ไขสตริงเดิมโดยตรงไม่ได้ เมธอดของสตริงคืนค่าใหม่ ตำแหน่งและความยาวนับตามจุดรหัส Unicode: อีโมจิหนึ่งตัวใช้หนึ่งตำแหน่ง แต่ตัวอักษรที่มีเครื่องหมายกำกับแยกหรืออีโมจิที่ประกอบกันอาจใช้หลายตำแหน่ง","behavior":"เก็บข้อความที่เขียนในเครื่องหมายคำพูดหรือแปลงด้วย str(value) แก้ไขสตริงเดิมโดยตรงไม่ได้ เมธอดของสตริงคืนค่าใหม่ ตำแหน่งและความยาวนับตามจุดรหัส Unicode: อีโมจิหนึ่งตัวใช้หนึ่งตำแหน่ง แต่ตัวอักษรที่มีเครื่องหมายกำกับแยกหรืออีโมจิที่ประกอบกันอาจใช้หลายตำแหน่ง","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":false,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"name = \"Start\"\nif name:\n    first_char = name[0]\n    text(first_char)","aliases":[],"group":null},{"key":"class-string-creation-method-literal","kind":"CREATION_METHOD","parentKey":"class-string","name":"literal","signature":"\"hello\"","description":"สร้างข้อความโดยตรงด้วยเครื่องหมายคำพูดเดี่ยวหรือคู่","behavior":"สร้างข้อความโดยตรงด้วยเครื่องหมายคำพูดเดี่ยวหรือคู่","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"text","type":"String","defaultValue":null,"description":"String content between quotes.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"String","returnDescription":"ค่าสตริงใหม่","example":"label = \"Start\"\ntext(label)","aliases":[],"group":"FLOW"},{"key":"class-string-creation-method-cast","kind":"CREATION_METHOD","parentKey":"class-string","name":"cast","signature":"str(value, /)","description":"แปลงค่าเป็นข้อความ คอลเลกชันขนาดใหญ่หรือค่าที่ซ้อนลึกจะถูกย่อพร้อมเครื่องหมายแสดงส่วนที่ละไว้ ส่วนสตริงที่ส่งมาโดยตรงจะไม่เปลี่ยน","behavior":"แปลงค่าเป็นข้อความ คอลเลกชันขนาดใหญ่หรือค่าที่ซ้อนลึกจะถูกย่อพร้อมเครื่องหมายแสดงส่วนที่ละไว้ ส่วนสตริงที่ส่งมาโดยตรงจะไม่เปลี่ยน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Value to convert into text.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"String","returnDescription":"ค่าข้อความที่แปลงแล้ว","example":"attempt = 3\nline = str(attempt)","aliases":[],"group":"FLOW"},{"key":"class-string-method-length","kind":"METHOD","parentKey":"class-string","name":"length","signature":"len(string, /)","description":"นับจำนวนอักขระในสตริง","behavior":"นับจำนวนอักขระในสตริง","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"string","type":"String","defaultValue":null,"description":"String value to count.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"จำนวนตัวอักษร","example":"label = \"Play\"\ncount = len(label)        # คืนค่า 4","aliases":[],"group":"FLOW"},{"key":"class-string-method-index-access","kind":"METHOD","parentKey":"class-string","name":"index_access","signature":"string[index]","description":"อ่านหนึ่งอักขระตามตำแหน่ง เริ่มที่ 0 ดัชนีติดลบนับจากท้าย: -1 คือตำแหน่งสุดท้าย","behavior":"อ่านหนึ่งอักขระตามตำแหน่ง เริ่มที่ 0 ดัชนีติดลบนับจากท้าย: -1 คือตำแหน่งสุดท้าย","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"string","type":"String","defaultValue":null,"description":"Source string.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"index","type":"Int","defaultValue":null,"description":"ตำแหน่งอักขระ: 0 คือตัวแรก และ -1 คือตัวสุดท้าย","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"String","returnDescription":"สตริงหนึ่งอักขระ หากตำแหน่งอยู่นอกสตริงจะแจ้ง IndexError","example":"label = \"Play\"\nfirst = label[0]          # คืนค่า 'P'\nlast = label[-1]          # คืนค่า 'y'","aliases":[],"group":"FLOW"},{"key":"class-string-method-slice","kind":"METHOD","parentKey":"class-string","name":"slice","signature":"string[start:end[:step]]","description":"คืนสตริงใหม่ตั้งแต่ start จนถึงก่อน end ดัชนีติดลบนับจากท้าย หากไม่ระบุขอบเขต จะเลือกทั้งสตริงตามทิศทางของ step","behavior":"คืนสตริงใหม่ตั้งแต่ start จนถึงก่อน end ดัชนีติดลบนับจากท้าย หากไม่ระบุขอบเขต จะเลือกทั้งสตริงตามทิศทางของ step","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"start","type":"Int?","defaultValue":"start of string","description":"First character index to include.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"},{"name":"end","type":"Int","defaultValue":"end of string","description":"Stop before this character index.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"},{"name":"step","type":"Int","defaultValue":"1","description":"Distance between characters. Cannot be 0; negative values read backward.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"}],"returnType":"String","returnDescription":"ชิ้นสตริงใหม่ ยึดเข้ากับช่วงที่มีอยู่","example":"label = \"abcdef\"\nmiddle = label[1:4]       # คืนค่า 'bcd'\ntail = label[-3:]         # คืนค่า 'def'\nreverse = label[::-1]     # คืนค่า 'fedcba'","aliases":[],"group":"FLOW"},{"key":"class-string-method-lower-method","kind":"METHOD","parentKey":"class-string","name":"lower_method","signature":"string.lower()","description":"Return a lowercase copy of the string.","behavior":"Return a lowercase copy of the string.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"String","returnDescription":"Lowercase string.","example":"label = \"PLAY\"\ntext(label.lower())","aliases":[],"group":"FLOW"},{"key":"class-string-method-upper-method","kind":"METHOD","parentKey":"class-string","name":"upper_method","signature":"string.upper()","description":"Return an uppercase copy of the string.","behavior":"Return an uppercase copy of the string.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"String","returnDescription":"Uppercase string.","example":"label = \"play\"\ntext(label.upper())","aliases":[],"group":"FLOW"},{"key":"class-string-method-strip-method","kind":"METHOD","parentKey":"class-string","name":"strip_method","signature":"string.strip(chars=None, /)","description":"Trim whitespace, or the provided characters, from both ends.","behavior":"Trim whitespace, or the provided characters, from both ends.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"chars","type":"String?","defaultValue":"None","description":"ลบอักขระใดก็ตามที่อยู่ในชุดนี้ซ้ำ ๆ จากปลายที่เลือก ไม่ได้ลบข้อความ chars ทั้งชุดเป็นคำนำหน้าหรือคำลงท้าย","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"String","returnDescription":"Trimmed string.","example":"label = \"  Play  \"\nclean = label.strip()","aliases":[],"group":"FLOW"},{"key":"class-string-method-lstrip-method","kind":"METHOD","parentKey":"class-string","name":"lstrip_method","signature":"string.lstrip(chars=None, /)","description":"Trim whitespace, or the provided characters, from the left side.","behavior":"Trim whitespace, or the provided characters, from the left side.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"chars","type":"String?","defaultValue":"None","description":"ลบอักขระใดก็ตามที่อยู่ในชุดนี้ซ้ำ ๆ จากปลายที่เลือก ไม่ได้ลบข้อความ chars ทั้งชุดเป็นคำนำหน้าหรือคำลงท้าย","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"String","returnDescription":"Left-trimmed string.","example":"label = \"...Play\"\nclean = label.lstrip(\".\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-rstrip-method","kind":"METHOD","parentKey":"class-string","name":"rstrip_method","signature":"string.rstrip(chars=None, /)","description":"Trim whitespace, or the provided characters, from the right side.","behavior":"Trim whitespace, or the provided characters, from the right side.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"chars","type":"String?","defaultValue":"None","description":"ลบอักขระใดก็ตามที่อยู่ในชุดนี้ซ้ำ ๆ จากปลายที่เลือก ไม่ได้ลบข้อความ chars ทั้งชุดเป็นคำนำหน้าหรือคำลงท้าย","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"String","returnDescription":"Right-trimmed string.","example":"label = \"Play...\"\nclean = label.rstrip(\".\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-startswith-method","kind":"METHOD","parentKey":"class-string","name":"startswith_method","signature":"string.startswith(prefix, start=0, stop=len(string), /)","description":"ตรวจว่าส่วนที่เลือกเริ่มต้นด้วย prefix หรือไม่ โดยแยกตัวพิมพ์เล็กและตัวพิมพ์ใหญ่","behavior":"ตรวจว่าส่วนที่เลือกเริ่มต้นด้วย prefix หรือไม่ โดยแยกตัวพิมพ์เล็กและตัวพิมพ์ใหญ่","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"prefix","type":"String | tuple","defaultValue":null,"description":"ข้อความหรือ tuple ของข้อความที่เป็นไปได้ คืน True หากมีข้อความใดตรงที่จุดเริ่มต้น","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int?","defaultValue":"0","description":"ตำแหน่งแรกที่รวม เริ่มที่ 0 ค่าติดลบนับจากท้าย ขอบเขตที่เกินจะถูกจำกัดให้อยู่ในช่วงที่มี","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int?","defaultValue":"len(string)","description":"หยุดก่อนตำแหน่งนี้ ค่าติดลบนับจากท้าย ขอบเขตที่เกินจะถูกจำกัดให้อยู่ในช่วงที่มี","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":"true when the prefix matches.","example":"label = \"Play\"\nready = label.startswith(\"Pl\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-endswith-method","kind":"METHOD","parentKey":"class-string","name":"endswith_method","signature":"string.endswith(suffix, start=0, stop=len(string), /)","description":"ตรวจว่าส่วนที่เลือกลงท้ายด้วย suffix หรือไม่ โดยแยกตัวพิมพ์เล็กและตัวพิมพ์ใหญ่","behavior":"ตรวจว่าส่วนที่เลือกลงท้ายด้วย suffix หรือไม่ โดยแยกตัวพิมพ์เล็กและตัวพิมพ์ใหญ่","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"suffix","type":"String | tuple","defaultValue":null,"description":"ข้อความหรือ tuple ของข้อความที่เป็นไปได้ คืน True หากมีข้อความใดตรงที่จุดสิ้นสุด","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int?","defaultValue":"0","description":"ตำแหน่งแรกที่รวม เริ่มที่ 0 ค่าติดลบนับจากท้าย ขอบเขตที่เกินจะถูกจำกัดให้อยู่ในช่วงที่มี","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int?","defaultValue":"len(string)","description":"หยุดก่อนตำแหน่งนี้ ค่าติดลบนับจากท้าย ขอบเขตที่เกินจะถูกจำกัดให้อยู่ในช่วงที่มี","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":"true when the suffix matches.","example":"label = \"Play\"\nready = label.endswith(\"ay\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-find-method","kind":"METHOD","parentKey":"class-string","name":"find_method","signature":"string.find(sub, start=0, stop=len(string), /)","description":"Find the first substring index, or return -1 when absent.","behavior":"Find the first substring index, or return -1 when absent.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"sub","type":"String","defaultValue":null,"description":"Substring to find.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int?","defaultValue":"0","description":"ตำแหน่งแรกที่ค้นหา เริ่มที่ 0 ค่าติดลบนับจากท้าย ขอบเขตที่เกินจะถูกจำกัดให้อยู่ในช่วงที่มี","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int?","defaultValue":"len(string)","description":"หยุดค้นหาก่อนตำแหน่งนี้ ค่าติดลบนับจากท้าย ขอบเขตที่เกินจะถูกจำกัดให้อยู่ในช่วงที่มี","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"ตำแหน่งแรกที่ตรงกันในสตริงต้นฉบับ เริ่มที่ 0 หรือ -1 หากไม่พบ","example":"label = \"start button\"\nindex = label.find(\"button\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-index-method","kind":"METHOD","parentKey":"class-string","name":"index_method","signature":"string.index(sub, start=0, stop=len(string), /)","description":"คืนตำแหน่งแรกที่ตรงกันในสตริงต้นฉบับ หรือแจ้ง ValueError หากไม่มี sub ในส่วนที่เลือก","behavior":"คืนตำแหน่งแรกที่ตรงกันในสตริงต้นฉบับ หรือแจ้ง ValueError หากไม่มี sub ในส่วนที่เลือก","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"sub","type":"String","defaultValue":null,"description":"Substring that must exist.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int?","defaultValue":"0","description":"ตำแหน่งแรกที่ค้นหา เริ่มที่ 0 ค่าติดลบนับจากท้าย ขอบเขตที่เกินจะถูกจำกัดให้อยู่ในช่วงที่มี","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int?","defaultValue":"len(string)","description":"หยุดค้นหาก่อนตำแหน่งนี้ ค่าติดลบนับจากท้าย ขอบเขตที่เกินจะถูกจำกัดให้อยู่ในช่วงที่มี","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"First matching index.","example":"label = \"start button\"\nindex = label.index(\"button\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-replace-method","kind":"METHOD","parentKey":"class-string","name":"replace_method","signature":"string.replace(old, new, /, count=-1)","description":"Return a copy with occurrences of old text replaced.","behavior":"Return a copy with occurrences of old text replaced.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"old","type":"String","defaultValue":null,"description":"ข้อความที่จะแทนที่ โดยไม่นับจุดที่ตรงกันซ้อนทับ หากเป็นสตริงว่าง จะแทรก new ที่ขอบระหว่างอักขระ ตามจำนวนที่ count อนุญาต","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"new","type":"String","defaultValue":null,"description":"Replacement text.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"count","type":"Int","defaultValue":"-1","description":"Maximum replacements; negative means all.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"String","returnDescription":"Updated string copy.","example":"label = \"start start\"\nonce = label.replace(\"start\", \"play\", 1)","aliases":[],"group":"FLOW"},{"key":"class-string-method-split-method","kind":"METHOD","parentKey":"class-string","name":"split_method","signature":"string.split(sep=None, maxsplit=-1)","description":"คืน list ของข้อความที่แบ่งด้วย sep หาก sep=None จะรวมกลุ่มช่องว่างเป็นตัวคั่นเดียวและข้ามช่องว่างต้นข้อความ หลังแบ่งครบ maxsplit จะเก็บส่วนที่เหลือเป็นรายการเดียว","behavior":"คืน list ของข้อความที่แบ่งด้วย sep หาก sep=None จะรวมกลุ่มช่องว่างเป็นตัวคั่นเดียวและข้ามช่องว่างต้นข้อความ หลังแบ่งครบ maxsplit จะเก็บส่วนที่เหลือเป็นรายการเดียว","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"sep","type":"String?","defaultValue":"None","description":"ข้อความตัวคั่น หากเป็นสตริงว่างจะแจ้ง ValueError ส่วน None จะแบ่งตามกลุ่มช่องว่างแทน","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"maxsplit","type":"Int","defaultValue":"-1","description":"Maximum split count; negative means all.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"list","returnDescription":"List of string parts.","example":"raw = \"a,b,c\"\nparts = raw.split(\",\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-join-method","kind":"METHOD","parentKey":"class-string","name":"join_method","signature":"string.join(iterable, /)","description":"รวมสตริงจากแหล่งข้อมูลที่วนลูปได้ โดยแทรกสตริงนี้ระหว่างแต่ละรายการ หากรายการใดไม่ใช่สตริงจะแจ้งข้อผิดพลาด","behavior":"รวมสตริงจากแหล่งข้อมูลที่วนลูปได้ โดยแทรกสตริงนี้ระหว่างแต่ละรายการ หากรายการใดไม่ใช่สตริงจะแจ้งข้อผิดพลาด","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable<String>","defaultValue":null,"description":"String values to join.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"String","returnDescription":"Joined string.","example":"parts = [\"a\", \"b\", \"c\"]\nline = \",\".join(parts)","aliases":[],"group":"FLOW"},{"key":"class-string-method-count-method","kind":"METHOD","parentKey":"class-string","name":"count_method","signature":"string.count(sub, start=0, stop=len(string), /)","description":"Count non-overlapping substring occurrences.","behavior":"Count non-overlapping substring occurrences.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"sub","type":"String","defaultValue":null,"description":"ข้อความที่จะนับ สตริงว่างตรงกับทุกขอบระหว่างอักขระ จึงนับได้เท่ากับความยาวส่วนที่เลือกบวก 1","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int?","defaultValue":"0","description":"ตำแหน่งแรกที่เริ่มนับ เริ่มที่ 0 ค่าติดลบนับจากท้าย ขอบเขตที่เกินจะถูกจำกัดให้อยู่ในช่วงที่มี","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int?","defaultValue":"len(string)","description":"หยุดนับก่อนตำแหน่งนี้ ค่าติดลบนับจากท้าย ขอบเขตที่เกินจะถูกจำกัดให้อยู่ในช่วงที่มี","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"Occurrence count.","example":"label = \"banana\"\ncount = label.count(\"an\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-isalpha-method","kind":"METHOD","parentKey":"class-string","name":"isalpha_method","signature":"string.isalpha()","description":"Check whether the string is non-empty and all characters are letters.","behavior":"Check whether the string is non-empty and all characters are letters.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"true for letters only.","example":"label = \"Play\"\nok = label.isalpha()","aliases":[],"group":"FLOW"},{"key":"class-string-method-isdigit-method","kind":"METHOD","parentKey":"class-string","name":"isdigit_method","signature":"string.isdigit()","description":"ตรวจว่าสตริงไม่ว่างและทุกอักขระเป็นเลขโดด Unicode รวมถึงเลขยกกำลังและเลขในวงกลม","behavior":"ตรวจว่าสตริงไม่ว่างและทุกอักขระเป็นเลขโดด Unicode รวมถึงเลขยกกำลังและเลขในวงกลม","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"true for digits only.","example":"value = \"123\"\nok = value.isdigit()","aliases":[],"group":"FLOW"},{"key":"class-string-method-isalnum-method","kind":"METHOD","parentKey":"class-string","name":"isalnum_method","signature":"string.isalnum()","description":"ตรวจว่าสตริงไม่ว่างและทุกอักขระเป็นตัวอักษรหรือตัวเลข Unicode รวมถึงเศษส่วน","behavior":"ตรวจว่าสตริงไม่ว่างและทุกอักขระเป็นตัวอักษรหรือตัวเลข Unicode รวมถึงเศษส่วน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"True เมื่อมีเฉพาะตัวอักษรหรือตัวเลข และ False เมื่อสตริงว่าง","example":"value = \"A123\"\nok = value.isalnum()","aliases":[],"group":"FLOW"},{"key":"class-string-method-isspace-method","kind":"METHOD","parentKey":"class-string","name":"isspace_method","signature":"string.isspace()","description":"Check whether the string is non-empty and all characters are whitespace.","behavior":"Check whether the string is non-empty and all characters are whitespace.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"true for whitespace only.","example":"value = \"   \"\nok = value.isspace()","aliases":[],"group":"FLOW"},{"key":"class-string-method-for-loop","kind":"METHOD","parentKey":"class-string","name":"for_loop","signature":"for ch in string:","description":"วนซ้ำอักขระจากซ้ายไปขวา","behavior":"วนซ้ำอักขระจากซ้ายไปขวา","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"ch","type":"String","defaultValue":null,"description":"Current character in the loop.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"string","type":"String","defaultValue":null,"description":"String to iterate.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง ดำเนินการหนึ่งครั้งต่อตัวละคร","example":"word = \"Go\"\nfor ch in word:\n    text(ch)","aliases":[],"group":"FLOW"},{"key":"class-string-method-truthy-check","kind":"METHOD","parentKey":"class-string","name":"truthy_check","signature":"if string | if not string","description":"ตรวจสอบว่าสตริงว่างเปล่าหรือไม่","behavior":"ตรวจสอบว่าสตริงว่างเปล่าหรือไม่","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"string","type":"String","defaultValue":null,"description":"String used in the condition.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean condition","returnDescription":"จริงเมื่อไม่ว่างเปล่า เท็จเมื่อว่างเปล่า","example":"value = \"\"\nif not value:\n    text(\"empty\")","aliases":[],"group":"FLOW"},{"key":"class-macropanel","kind":"CLASS","parentKey":null,"name":"MacroPanel","signature":"MacroPanel(title=\"\", subtitle=\"\", confirm_text=\"Run\", cancel_text=\"Cancel\", *, version=\"\")","description":"สร้างแผงให้ผู้ใช้กรอกการตั้งค่ามาโคร เพิ่มช่องกรอกแล้วเรียก show() เพื่อแสดงแผง","behavior":"สร้างแผงให้ผู้ใช้กรอกการตั้งค่ามาโคร เพิ่มช่องกรอกแล้วเรียก show() เพื่อแสดงแผง","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"สร้างแต่ละแผงในโฟลว์เดียว กล่องโต้ตอบแสดงทีละกล่องและรอผู้ใช้ แผงลอยให้ทำงานต่อได้ error() หยุดทุกโฟลว์"},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":true,"fields":["title","subtitle","version","confirm_text","cancel_text"],"fieldDocs":[{"name":"title","type":"String","defaultValue":"\"\"","description":"Panel title. Writable after construction.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"subtitle","type":"String","defaultValue":"\"\"","description":"Panel subtitle/helper text. Writable after construction.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"version","type":"String","defaultValue":"\"\"","description":"ป้าย version ทางเลือกที่เก็บไว้เพื่อความเข้ากันได้ ไม่รีเซ็ตการตั้งค่าที่บันทึกแบบ native และไม่เปลี่ยนตัวระบุ สามารถแก้ไขหลังสร้างได้","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"confirm_text","type":"String","defaultValue":"\"Run\"","description":"Confirm button label.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"cancel_text","type":"String","defaultValue":"\"Cancel\"","description":"Cancel button label.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"title","type":"String","defaultValue":"\"\"","description":"Panel title.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"subtitle","type":"String","defaultValue":"\"\"","description":"Panel subtitle/helper text.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"confirm_text","type":"String","defaultValue":"\"Run\"","description":"Confirm button label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"cancel_text","type":"String","defaultValue":"\"Cancel\"","description":"Cancel button label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"version","type":"String","defaultValue":"\"\"","description":"ป้าย version ทางเลือกที่เก็บไว้เพื่อความเข้ากันได้ ไม่รีเซ็ตการตั้งค่าที่บันทึกแบบ native และไม่เปลี่ยนตัวระบุ","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"panel = MacroPanel(\"Run config\", \"Pick options before run\", confirm_text=\"Start\", cancel_text=\"Back\")\npanel.text(\"<b>Ready?</b>\")\npanel.checkbox(\"safe_mode\", \"Safe mode\", checked=True)\npanel.toggle_switch(\"retry\", \"Auto retry\", checked=False)\npanel.edit_text(\"username\", default=\"player01\", desc=\"Shown below the field\")\npanel.edit_text(\"runs\", \"Runs\", default=3, desc=\"Numbers only\", input_type=\"number\")\npanel.radio_group(\"mode\", [\"farm\", \"pvp\"], default=\"farm\")\npanel.radio_group(\"target\", [\"boss\", \"minion\"], default=\"boss\", dropdown=True)\npanel.slider(\"speed\", min=0, max=100, step=5, default=60)\npanel.stepper(\"retry_count\", min=0, max=10, step=1, default=2)\nvalues = panel.show()","aliases":[],"group":null},{"key":"class-macropanel-static-method-notify","kind":"STATIC_METHOD","parentKey":"class-macropanel","name":"notify","signature":"MacroPanel.notify(text)","description":"แสดงข้อความและรอผู้ใช้ยืนยันก่อนทำสคริปต์ต่อ สตริงแสดงตามที่เขียน ค่าอื่นแสดงแบบ str(value) โดยแยกข้อมูลซ้อนเป็นหลายบรรทัด","behavior":"แสดงข้อความและรอผู้ใช้ยืนยันก่อนทำสคริปต์ต่อ สตริงแสดงตามที่เขียน ค่าอื่นแสดงแบบ str(value) โดยแยกข้อมูลซ้อนเป็นหลายบรรทัด","execution":{"blocking":"yes","threadSafety":"serialized","parallel":"conditional","details":"แสดงข้อความและรอการยืนยัน ข้อความและแผงโต้ตอบจากทุกโฟลว์แสดงทีละรายการ"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"text","type":"Any","defaultValue":null,"description":"Message text or structured value to display.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนหลังจากการยืนยันของผู้ใช้","example":"# รอให้ผู้ใช้รับทราบข้อความนี้\nMacroPanel.notify(\"Macro is ready\")","aliases":[],"group":"FLOW"},{"key":"class-macropanel-static-method-error","kind":"STATIC_METHOD","parentKey":"class-macropanel","name":"error","signature":"MacroPanel.error(text)","description":"แจ้งข้อผิดพลาดด้วยข้อความนี้และหยุดสคริปต์ ขณะรันมาโคร หน้าข้อผิดพลาดจะแสดงลำดับโฟลว์และแอ็กชัน ค่าอื่นแปลงเป็นข้อความที่อ่านง่ายเหมือน str(value)","behavior":"แจ้งข้อผิดพลาดด้วยข้อความนี้และหยุดสคริปต์ ขณะรันมาโคร หน้าข้อผิดพลาดจะแสดงลำดับโฟลว์และแอ็กชัน ค่าอื่นแปลงเป็นข้อความที่อ่านง่ายเหมือน str(value)","execution":{"blocking":"no","threadSafety":"serialized","parallel":"no","details":"หยุดทุกโฟลว์พร้อมข้อผิดพลาดสคริปต์ โดยไม่รอยืนยัน"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"text","type":"Any","defaultValue":null,"description":"Error text or structured value to display.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"ไม่กลับมา; ทำให้เกิดข้อผิดพลาดรันไทม์","example":"# หากเงื่อนไขเบื้องต้นไม่ผ่าน จะจบ Run ทั้งหมด\nif not TfliteModel.exists(\"enemy_detector\"):\n    MacroPanel.error(\"Import enemy_detector in Template Manager\")","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-edit-text","kind":"METHOD","parentKey":"class-macropanel","name":"edit_text","signature":"panel.edit_text(name, label=None, default=\"\", desc=None, input_type=\"text\")","description":"เพิ่มช่องที่แก้ไขได้ ช่องตัวเลขรับเลขฐานสิบที่มีเครื่องหมายและมีค่าจำกัด รวมถึงรูปแบบวิทยาศาสตร์และช่องว่างรอบค่า โดยไม่รับค่าว่าง NaN Infinity ค่าที่ล้น หรือเลขฐานสิบหก ค่าที่ไม่ถูกต้องใน dialog จะแสดงข้อผิดพลาดและปิดกั้น Run ส่วนแผงลอยจะแสดงข้อผิดพลาด เก็บค่าล่าสุดที่ถูกต้อง และไม่บันทึกค่าร่างที่ผิด","behavior":"เพิ่มช่องที่แก้ไขได้ ช่องตัวเลขรับเลขฐานสิบที่มีเครื่องหมายและมีค่าจำกัด รวมถึงรูปแบบวิทยาศาสตร์และช่องว่างรอบค่า โดยไม่รับค่าว่าง NaN Infinity ค่าที่ล้น หรือเลขฐานสิบหก ค่าที่ไม่ถูกต้องใน dialog จะแสดงข้อผิดพลาดและปิดกั้น Run ส่วนแผงลอยจะแสดงข้อผิดพลาด เก็บค่าล่าสุดที่ถูกต้อง และไม่บันทึกค่าร่างที่ผิด","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"สร้างแต่ละแผงในโฟลว์เดียว กล่องโต้ตอบแสดงทีละกล่องและรอผู้ใช้ แผงลอยให้ทำงานต่อได้ error() หยุดทุกโฟลว์"},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"คีย์ที่ไม่ว่างสำหรับช่องนี้ใน dict ที่คืนมาและการตั้งค่าถาวร แต่ละช่องในแผงต้องใช้คีย์ต่างกัน การตั้งค่า native ใช้ขอบเขตมาโครร่วมกับ namespace ที่ป้องกันไว้ (หรือ macroId เฉพาะที่) ตัวแปร variant และชื่อช่อง ส่วน title, version, ป้ายที่แปล และอินสแตนซ์ขณะรันไม่อยู่ในคีย์","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"label","type":"String?","defaultValue":"None","description":"Display label. Leave empty to hide label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"default","type":"String|Number","defaultValue":"\"\"","description":"ค่าที่ป้อนใช้เมื่อไม่มีค่าที่บันทึกแบบ native หรือค่า Storage ที่ตรงกันเท่านั้น ช่องตัวเลขในแผงลอยต้องมีค่าเริ่มต้นที่ถูกต้องจากการตั้งค่า native, Storage หรือ default มิฉะนั้น show() จะเกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"desc","type":"String?","defaultValue":"None","description":"Small helper text displayed below this field.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"input_type","type":"String","defaultValue":"\"text\"","description":"ใช้ \"text\" สำหรับ String หรือ \"number\" สำหรับ Number (float) ค่าที่บันทึกแบบ native มีลำดับความสำคัญก่อน มิฉะนั้นจะกู้คืนสตริงตัวเลขที่เคยบันทึกใน Storage ได้","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"แผงเดิม จึงเรียกเมธอดอื่นของแผงต่อจากผลลัพธ์ได้","example":"# สร้างแผงควบคุมและรอผู้ใช้ยืนยัน\npanel = MacroPanel(\"Settings\")\npanel.edit_text(\"player\", label=\"Player\", default=\"Guest\")\nresult = panel.show()\nprint(result)","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-checkbox","kind":"METHOD","parentKey":"class-macropanel","name":"checkbox","signature":"panel.checkbox(name, label=None, checked=False)","description":"เพิ่มช่องให้ผู้ใช้เลือกหรือยกเลิกการเลือก","behavior":"เพิ่มช่องให้ผู้ใช้เลือกหรือยกเลิกการเลือก","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"สร้างแต่ละแผงในโฟลว์เดียว กล่องโต้ตอบแสดงทีละกล่องและรอผู้ใช้ แผงลอยให้ทำงานต่อได้ error() หยุดทุกโฟลว์"},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"คีย์ที่ไม่ว่างสำหรับช่องนี้ใน dict ที่คืนมาและการตั้งค่าถาวร แต่ละช่องในแผงต้องใช้คีย์ต่างกัน การตั้งค่า native ใช้ขอบเขตมาโครร่วมกับ namespace ที่ป้องกันไว้ (หรือ macroId เฉพาะที่) ตัวแปร variant และชื่อช่อง ส่วน title, version, ป้ายที่แปล และอินสแตนซ์ขณะรันไม่อยู่ในคีย์","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"label","type":"String?","defaultValue":"None","description":"Display label. Leave empty to hide label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"checked","type":"Boolean","defaultValue":"False","description":"ค่าเริ่มต้นใช้เมื่อไม่มีค่าที่บันทึกแบบ native หรือค่า Storage ที่ตรงกันเท่านั้น","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"แผงเดิม จึงเรียกเมธอดอื่นของแผงต่อจากผลลัพธ์ได้","example":"# สร้างแผงควบคุมและรอผู้ใช้ยืนยัน\npanel = MacroPanel(\"Settings\")\npanel.checkbox(\"sound\", label=\"Sound\", checked=True)\nresult = panel.show()\nprint(result)","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-toggle-switch","kind":"METHOD","parentKey":"class-macropanel","name":"toggle_switch","signature":"panel.toggle_switch(name, label=None, checked=False)","description":"เพิ่มสวิตช์ให้ผู้ใช้เปิดหรือปิด","behavior":"เพิ่มสวิตช์ให้ผู้ใช้เปิดหรือปิด","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"สร้างแต่ละแผงในโฟลว์เดียว กล่องโต้ตอบแสดงทีละกล่องและรอผู้ใช้ แผงลอยให้ทำงานต่อได้ error() หยุดทุกโฟลว์"},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"คีย์ที่ไม่ว่างสำหรับช่องนี้ใน dict ที่คืนมาและการตั้งค่าถาวร แต่ละช่องในแผงต้องใช้คีย์ต่างกัน การตั้งค่า native ใช้ขอบเขตมาโครร่วมกับ namespace ที่ป้องกันไว้ (หรือ macroId เฉพาะที่) ตัวแปร variant และชื่อช่อง ส่วน title, version, ป้ายที่แปล และอินสแตนซ์ขณะรันไม่อยู่ในคีย์","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"label","type":"String?","defaultValue":"None","description":"Display label. Leave empty to hide label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"checked","type":"Boolean","defaultValue":"False","description":"ค่าเริ่มต้นใช้เมื่อไม่มีค่าที่บันทึกแบบ native หรือค่า Storage ที่ตรงกันเท่านั้น","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"แผงเดิม จึงเรียกเมธอดอื่นของแผงต่อจากผลลัพธ์ได้","example":"# สร้างแผงควบคุมและรอผู้ใช้ยืนยัน\npanel = MacroPanel(\"Settings\")\npanel.toggle_switch(\"enabled\", label=\"Enabled\", checked=True)\nresult = panel.show()\nprint(result)","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-radio-group","kind":"METHOD","parentKey":"class-macropanel","name":"radio_group","signature":"panel.radio_group(name, options, label=None, default=None, dropdown=False, multi_select=False, depends_on=None)","description":"Add a radio-group selector, or render it as a single- or multi-select dropdown when dropdown=True. Options can be a list or a dict mapping parent option labels to sub-option lists when depends_on is set.","behavior":"Add a radio-group selector, or render it as a single- or multi-select dropdown when dropdown=True. Options can be a list or a dict mapping parent option labels to sub-option lists when depends_on is set.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"สร้างแต่ละแผงในโฟลว์เดียว กล่องโต้ตอบแสดงทีละกล่องและรอผู้ใช้ แผงลอยให้ทำงานต่อได้ error() หยุดทุกโฟลว์"},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"คีย์ที่ไม่ว่างสำหรับช่องนี้ใน dict ที่คืนมาและการตั้งค่าถาวร แต่ละช่องในแผงต้องใช้คีย์ต่างกัน การตั้งค่า native ใช้ขอบเขตมาโครร่วมกับ namespace ที่ป้องกันไว้ (หรือ macroId เฉพาะที่) ตัวแปร variant และชื่อช่อง ส่วน title, version, ป้ายที่แปล และอินสแตนซ์ขณะรันไม่อยู่ในคีย์","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"options","type":"list[String]|dict[String, list[String]]","defaultValue":null,"description":"Selectable options or dictionary mapping parent option labels to lists of options when depends_on is set.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"label","type":"String?","defaultValue":"None","description":"Display label. Leave empty to hide label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"default","type":"String|Int|list|None","defaultValue":"None","description":"ตัวเลือกเริ่มต้นใช้เมื่อไม่มีค่าที่บันทึกแบบ native หรือค่า Storage ที่ตรงกันเท่านั้น: ป้าย ดัชนีตัวเลือกแบบ 0-based หรือรายการป้าย/ดัชนีเมื่อ multi_select=True; None เลือกตัวเลือกแรก (หรือไม่เลือกเมื่อ multi_select=True)","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"dropdown","type":"Boolean","defaultValue":"False","description":"Render this selector as a dropdown instead of radio options.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"multi_select","type":"Boolean","defaultValue":"False","description":"Allow selecting multiple options when rendered as a dropdown. The panel returns a list of 0-based option indices.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"depends_on","type":"String?","defaultValue":"None","description":"Variable name of the preceding parent selector this dropdown depends on for cascading dynamic options.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"แผงเดิม จึงเรียกเมธอดอื่นของแผงต่อจากผลลัพธ์ได้","example":"# สร้างแผงควบคุมและรอผู้ใช้ยืนยัน\npanel = MacroPanel(\"Settings\")\npanel.radio_group(\"mode\", [\"slow\", \"fast\"], label=\"Mode\", default=\"slow\")\nresult = panel.show()\nprint(result)","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-slider","kind":"METHOD","parentKey":"class-macropanel","name":"slider","signature":"panel.slider(name, min=0, max=100, step=1, label=None, default=None)","description":"เพิ่มแถบเลื่อนตัวเลข","behavior":"เพิ่มแถบเลื่อนตัวเลข","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"สร้างแต่ละแผงในโฟลว์เดียว กล่องโต้ตอบแสดงทีละกล่องและรอผู้ใช้ แผงลอยให้ทำงานต่อได้ error() หยุดทุกโฟลว์"},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"คีย์ที่ไม่ว่างสำหรับช่องนี้ใน dict ที่คืนมาและการตั้งค่าถาวร แต่ละช่องในแผงต้องใช้คีย์ต่างกัน การตั้งค่า native ใช้ขอบเขตมาโครร่วมกับ namespace ที่ป้องกันไว้ (หรือ macroId เฉพาะที่) ตัวแปร variant และชื่อช่อง ส่วน title, version, ป้ายที่แปล และอินสแตนซ์ขณะรันไม่อยู่ในคีย์","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"min","type":"Number","defaultValue":"0","description":"Minimum value.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"max","type":"Number","defaultValue":"100","description":"ค่าสูงสุด ต้องไม่น้อยกว่า min","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"step","type":"Number","defaultValue":"1","description":"ระยะเพิ่มระหว่างค่าของแถบเลื่อน ต้องมากกว่า 0","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"label","type":"String?","defaultValue":"None","description":"Display label. Leave empty to hide label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"default","type":"Number?","defaultValue":"min","description":"ค่าเริ่มต้นใช้เมื่อไม่มีค่าที่บันทึกแบบ native หรือค่า Storage ที่ตรงกันเท่านั้น แล้วจำกัดให้อยู่ใน min/max","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"แผงเดิม จึงเรียกเมธอดอื่นของแผงต่อจากผลลัพธ์ได้","example":"# สร้างแผงควบคุมและรอผู้ใช้ยืนยัน\npanel = MacroPanel(\"Settings\")\npanel.slider(\"speed\", min=1, max=10, step=1, default=5)\nresult = panel.show()\nprint(result)","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-stepper","kind":"METHOD","parentKey":"class-macropanel","name":"stepper","signature":"panel.stepper(name, min=0, max=100, step=1, label=None, default=None)","description":"เพิ่มสเต็ปเปอร์ตัวเลขพร้อมตัวควบคุม +/-","behavior":"เพิ่มสเต็ปเปอร์ตัวเลขพร้อมตัวควบคุม +/-","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"สร้างแต่ละแผงในโฟลว์เดียว กล่องโต้ตอบแสดงทีละกล่องและรอผู้ใช้ แผงลอยให้ทำงานต่อได้ error() หยุดทุกโฟลว์"},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"คีย์ที่ไม่ว่างสำหรับช่องนี้ใน dict ที่คืนมาและการตั้งค่าถาวร แต่ละช่องในแผงต้องใช้คีย์ต่างกัน การตั้งค่า native ใช้ขอบเขตมาโครร่วมกับ namespace ที่ป้องกันไว้ (หรือ macroId เฉพาะที่) ตัวแปร variant และชื่อช่อง ส่วน title, version, ป้ายที่แปล และอินสแตนซ์ขณะรันไม่อยู่ในคีย์","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"min","type":"Number","defaultValue":"0","description":"Minimum integer value.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"max","type":"Number","defaultValue":"100","description":"จำนวนเต็มสูงสุด ต้องไม่น้อยกว่า min","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"step","type":"Number","defaultValue":"1","description":"จำนวนเต็มบวกที่เพิ่มหรือลดเมื่อกด + หรือ - แต่ละครั้ง ค่าตัวเลขจะถูกแปลงเป็นจำนวนเต็ม","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"label","type":"String?","defaultValue":"None","description":"Display label. Leave empty to hide label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"default","type":"Number?","defaultValue":"min","description":"ค่าเริ่มต้นใช้เมื่อไม่มีค่าที่บันทึกแบบ native หรือค่า Storage ที่ตรงกันเท่านั้น แล้วจำกัดให้อยู่ใน min/max","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"แผงเดิม จึงเรียกเมธอดอื่นของแผงต่อจากผลลัพธ์ได้","example":"# สร้างแผงควบคุมและรอผู้ใช้ยืนยัน\npanel = MacroPanel(\"Settings\")\npanel.stepper(\"count\", min=1, max=20, step=1, default=3)\nresult = panel.show()\nprint(result)","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-text","kind":"METHOD","parentKey":"class-macropanel","name":"text","signature":"panel.text(html)","description":"เพิ่มบล็อกข้อความ HTML แท็กพื้นฐานแสดงผลแบบอินไลน์ และส่วนย่อยสไตล์ CSS เช่น การ์ด ส่วนที่มีสี แถวดิ้น การไล่ระดับสี และกล่องโค้งมนจะแสดงผลใน WebView ที่ล็อคไว้โดยปิดใช้งาน JavaScript และการนำทางภายนอก","behavior":"เพิ่มบล็อกข้อความ HTML แท็กพื้นฐานแสดงผลแบบอินไลน์ และส่วนย่อยสไตล์ CSS เช่น การ์ด ส่วนที่มีสี แถวดิ้น การไล่ระดับสี และกล่องโค้งมนจะแสดงผลใน WebView ที่ล็อคไว้โดยปิดใช้งาน JavaScript และการนำทางภายนอก","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"สร้างแต่ละแผงในโฟลว์เดียว กล่องโต้ตอบแสดงทีละกล่องและรอผู้ใช้ แผงลอยให้ทำงานต่อได้ error() หยุดทุกโฟลว์"},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"html","type":"String","defaultValue":null,"description":"HTML content to display.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"แผงเดิม จึงเรียกเมธอดอื่นของแผงต่อจากผลลัพธ์ได้","example":"# สร้างแผงควบคุมและรอผู้ใช้ยืนยัน\npanel = MacroPanel(\"Settings\")\npanel.text(\"<b>Ready</b>\")\nresult = panel.show()\nprint(result)","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-localize","kind":"METHOD","parentKey":"class-macropanel","name":"localize","signature":"panel.localize(selector, variants, *, locales=None)","description":"ลงทะเบียนสำเนาแผงที่แปลแล้วสำหรับแผงลอย เมื่อเปลี่ยนตัวเลือก หน้าจอจะเปลี่ยนทันทีแม้มาโครหยุดชั่วคราว โดยไม่ต้องใช้ Python callback หรือเปิดแผงใหม่ และยังคงค่า ข้อความฉบับร่าง และตำแหน่งหน้าต่าง เปลี่ยนได้เฉพาะข้อความ ได้แก่ ชื่อแผง คำบรรยาย ป้ายและคำอธิบายช่อง HTML และข้อความตัวเลือก ตัวเลือกตรงกันตามตำแหน่ง ส่วนค่า Storage และค่าเริ่มต้นใช้ของแผงหลัก ตัวเลือกภาษาต้องเหมือนกันทุกชุด ทุกชุดต้องมีจำนวน ลำดับ ชนิดและชื่อองค์ประกอบ ขีดจำกัดตัวเลข input_type multi_select โครงสร้างการพึ่งพา และจำนวนตัวเลือกเท่ากัน รวมถึงคีย์และลำดับของแขนงที่พึ่งพา ไม่รองรับการแปลซ้อนกัน การเรียกซ้ำจะแทนที่สำเนา การแก้แผงต้นฉบับภายหลังไม่มีผลจนกว่าจะลงทะเบียนใหม่ ระบบตรวจสอบทั้งตอนเรียกและตอน show() และแจ้งข้อผิดพลาดเมื่อไม่เข้ากัน แผงที่แปลแล้วแสดงในโหมด dialog ไม่ได้","behavior":"ลงทะเบียนสำเนาแผงที่แปลแล้วสำหรับแผงลอย เมื่อเปลี่ยนตัวเลือก หน้าจอจะเปลี่ยนทันทีแม้มาโครหยุดชั่วคราว โดยไม่ต้องใช้ Python callback หรือเปิดแผงใหม่ และยังคงค่า ข้อความฉบับร่าง และตำแหน่งหน้าต่าง เปลี่ยนได้เฉพาะข้อความ ได้แก่ ชื่อแผง คำบรรยาย ป้ายและคำอธิบายช่อง HTML และข้อความตัวเลือก ตัวเลือกตรงกันตามตำแหน่ง ส่วนค่า Storage และค่าเริ่มต้นใช้ของแผงหลัก ตัวเลือกภาษาต้องเหมือนกันทุกชุด ทุกชุดต้องมีจำนวน ลำดับ ชนิดและชื่อองค์ประกอบ ขีดจำกัดตัวเลข input_type multi_select โครงสร้างการพึ่งพา และจำนวนตัวเลือกเท่ากัน รวมถึงคีย์และลำดับของแขนงที่พึ่งพา ไม่รองรับการแปลซ้อนกัน การเรียกซ้ำจะแทนที่สำเนา การแก้แผงต้นฉบับภายหลังไม่มีผลจนกว่าจะลงทะเบียนใหม่ ระบบตรวจสอบทั้งตอนเรียกและตอน show() และแจ้งข้อผิดพลาดเมื่อไม่เข้ากัน แผงที่แปลแล้วแสดงในโหมด dialog ไม่ได้","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"สร้างแต่ละแผงในโฟลว์เดียว กล่องโต้ตอบแสดงทีละกล่องและรอผู้ใช้ แผงลอยให้ทำงานต่อได้ error() หยุดทุกโฟลว์"},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"selector","type":"String","defaultValue":null,"description":"ชื่อ radio_group หรือ dropdown แบบเลือกหนึ่งรายการที่เพิ่มไว้ก่อนหน้า ตัวเลือกนี้ใช้ multi_select หรือ depends_on ไม่ได้","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"variants","type":"dict[String, MacroPanel]","defaultValue":null,"description":"แต่ละป้ายของตัวเลือกต้องมีแผงหนึ่งชุดโดยใช้ป้ายนั้นเป็นคีย์ แผงจะถูกคัดลอกเมื่อเรียก และค่าเริ่มต้นของแผงเหล่านั้นไม่เปลี่ยนพฤติกรรมของแผงหลัก","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"locales","type":"dict[String, String]?","defaultValue":"None","description":"Optional map from selector option labels to supported app language codes en, vi, th, id, or fil. It must cover every variant exactly and controls built-in panel labels such as Pause and select-all summaries; None keeps the app language.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"MacroPanel","returnDescription":"แผงเดิม จึงเรียกเมธอดอื่นของแผงต่อจากผลลัพธ์ได้","example":"# สลับแผงลอยระหว่างภาษาอังกฤษและภาษาเวียดนาม\nen = MacroPanel(\"Fishing\")\nen.radio_group(\"language\", [\"English\", \"Tiếng Việt\"], label=\"Language\")\nen.checkbox(\"enabled\", label=\"Enabled\", checked=True)\nvi = MacroPanel(\"Câu cá\")\nvi.radio_group(\"language\", [\"English\", \"Tiếng Việt\"], label=\"Ngôn ngữ\")\nvi.checkbox(\"enabled\", label=\"Bật\", checked=True)\nen.localize(\"language\", {\"English\": en, \"Tiếng Việt\": vi}, locales={\"English\": \"en\", \"Tiếng Việt\": \"vi\"})\nconfig = en.show(mode=\"floating\")","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-show","kind":"METHOD","parentKey":"class-macropanel","name":"show","signature":"panel.show(*, mode=\"dialog\", anchor=\"top_left\", stop_button=True, width=None, height=None, collapsed=None, dock_position=None, pause_on_expand=True)","description":"แสดงแผงและคืน dict ของชื่อช่องกับค่า ใช้ค่าที่บันทึกแบบ native ก่อน ตามด้วยค่า Storage ที่ชื่อตรงกัน แล้วจึงใช้ค่าเริ่มต้นของช่อง การแก้ไขที่ยอมรับได้ทุกครั้งจะบันทึกแบบ native และซิงก์ Storage ทันที แม้มาโครหยุดชั่วคราว จึงไม่ต้องเรียก Storage.set(), values() หรือ close() ช่องเลือกและสวิตช์คืน Boolean แถบเลื่อนและช่องตัวเลขคืน Number ปุ่มเพิ่ม/ลดคืน Int ตัวเลือกคืนดัชนี Int เริ่มที่ 0 และช่องข้อความคืน String การเปิด show() เดิมซ้ำโดยไม่มีคำสั่งรันไทม์อื่นจะหยุดสคริปต์เพื่อป้องกันการวนไม่จบ","behavior":"แสดงแผงและคืน dict ของชื่อช่องกับค่า ใช้ค่าที่บันทึกแบบ native ก่อน ตามด้วยค่า Storage ที่ชื่อตรงกัน แล้วจึงใช้ค่าเริ่มต้นของช่อง การแก้ไขที่ยอมรับได้ทุกครั้งจะบันทึกแบบ native และซิงก์ Storage ทันที แม้มาโครหยุดชั่วคราว จึงไม่ต้องเรียก Storage.set(), values() หรือ close() ช่องเลือกและสวิตช์คืน Boolean แถบเลื่อนและช่องตัวเลขคืน Number ปุ่มเพิ่ม/ลดคืน Int ตัวเลือกคืนดัชนี Int เริ่มที่ 0 และช่องข้อความคืน String การเปิด show() เดิมซ้ำโดยไม่มีคำสั่งรันไทม์อื่นจะหยุดสคริปต์เพื่อป้องกันการวนไม่จบ","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"show() แบบ dialog รอผู้ใช้ show(mode=\"floating\") ให้ทำต่อโดยไม่รอยืนยัน ใช้ values() อ่านค่าและ close() ปิดแผง"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"mode","type":"String","defaultValue":"\"dialog\"","description":"dialog รอการยืนยัน กด Cancel จะคืน dict ว่าง floating คืนค่าทันทีและแสดงจนปิดหรือจบการรันมาโคร การเปิดแผงลอยอื่นจะแทนแผงเดิม","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"anchor","type":"String","defaultValue":"\"top_left\"","description":"ตำแหน่งแผงลอยเมื่อขยาย: top_left, top_right, bottom_left, bottom_right หรือ free โดย free เริ่มที่มุมซ้ายบนและลากแผงแยกจาก dock ที่ใช้ร่วมกันได้ การลาก dock จะย้ายเฉพาะ dock การเรียก show() ซ้ำจะคงตำแหน่งปัจจุบัน","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"stop_button","type":"Boolean","defaultValue":"True","description":"แสดงปุ่มหยุดบนแผงลอยที่ขยาย แผงที่ย่อไม่มีปุ่มหยุดแยก dock หลักยังมีปุ่มหยุดตามปกติในโหมด row","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"width","type":"Int?","defaultValue":"None","description":"ความกว้างหน้าต่างลอยที่ขยายอยู่เป็นพิกเซลของหน้าจอปัจจุบัน None ใช้ขนาดกะทัดรัดอัตโนมัติ ระบุจำนวนเต็มบวก ระบบจำกัดขนาดให้พอดีกับส่วนหัวและพื้นที่หน้าจอ แผงที่ย่อแล้วยังคงกะทัดรัด ไม่ใช้การปรับสเกลพิกัด Point","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"height","type":"Int?","defaultValue":"None","description":"ความสูงหน้าต่างลอยที่ขยายอยู่เป็นพิกเซลของหน้าจอปัจจุบัน None ปรับตามเนื้อหา ระบุจำนวนเต็มบวก ระบบจำกัดขนาดให้พอดีกับส่วนหัวและพื้นที่หน้าจอเหนือแป้นพิมพ์ แผงที่ย่อแล้วยังคงกะทัดรัด ไม่ใช้การปรับสเกลพิกัด Point","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"collapsed","type":"Boolean?","defaultValue":"None","description":"ใช้ได้เฉพาะโหมด floating; โหมด dialog ไม่รับค่าที่ไม่ใช่ None โดย True ย่อแผงเป็นปุ่มเปิดบน dock หลัก และ False ขยายแผง ส่วน None เปิดแผงใหม่แบบขยายและคงสถานะปัจจุบันเมื่อเรียก show() ซ้ำ มีผลตั้งแต่การแสดงครั้งแรก ระบุ anchor, width หรือ height ที่ปรับแต่งอีกครั้งในการเรียก show() ครั้งต่อไปเพื่อคงรูปแบบแผงที่ขยาย","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"dock_position","type":"Point | tuple[Number, Number] | list[Number] | None","defaultValue":"None","description":"ใช้ได้เฉพาะโหมด floating; โหมด dialog ไม่รับค่าที่ไม่ใช่ None กำหนดมุมซ้ายบนของ dock หลักที่ใช้ร่วมกันเป็นพิกเซลบนหน้าจอปัจจุบันได้ แม้ขณะแผงขยายหรือก่อนย่อครั้งแรก dock เคลื่อนที่ด้วยแอนิเมชัน 160 ms รับ Point(x, y) หรือ tuple/list ที่มีจำนวนจำกัดสองค่าพอดีในช่วง -2147483648 ถึง 2147483647 โดยไม่ใช้การปรับสเกลหรือ anchor ของ Point ตำแหน่ง dock ถูกจำกัดให้อยู่ในหน้าจอหลังวัดขนาดจริง None คงตำแหน่งปัจจุบัน แผงที่ขยายอยู่แยกตำแหน่งสำหรับทุก anchor รวมถึง free","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"pause_on_expand","type":"Boolean","defaultValue":"True","description":"ใช้กับโหมด floating เท่านั้น หากส่งอาร์กิวเมนต์นี้ในโหมด dialog จะเกิดข้อผิดพลาด True หยุดแมโครชั่วคราวเมื่อแผงลอยขยายและแสดงอยู่ show() คืนค่าทันที แล้วหยุดการทำงานที่จุดตรวจสอบ runtime ถัดไปจนกว่าจะย่อ ซ่อน หรือปิดแผง ใช้ collapsed=True หรือ pause_on_expand=False เพื่อให้สคริปต์ทำงานต่อขณะแผงเปิดอยู่ False ปิดการหยุดจากแผงนี้ แต่ยังคงการหยุดด้วยตนเอง แต่ละ show() ใช้ค่าจากการเรียกครั้งนั้น และกลับเป็น True เมื่อไม่ระบุ","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"dict","returnDescription":"dialog คืน dict แยกต่างหาก floating คืน dict เดิมเมื่อเรียก show() ซ้ำ การแก้ไขที่ถูกต้องอัปเดตรายการทันทีและบันทึกแบบ native พร้อมซิงก์ Storage แล้ว ตัวแปรที่กำหนดแยก เช่น speed = config[\"speed\"] จะเก็บค่าตอนอ่าน values() คืนสำเนาแยก ส่วน close() เก็บค่าสุดท้าย การแก้ dict ใน Python ไม่เปลี่ยนแผงหรือการตั้งค่าที่บันทึก และการอัปเดตแผงครั้งถัดไปจะเขียนทับการแก้นั้น","example":"# เริ่มแบบย่อ จากนั้นขยาย ย่อ และย้าย dock\npanel = MacroPanel(\"Run config\")\npanel.show(mode=\"floating\", collapsed=True, dock_position=Point(20, 100))\nwait(1000)\npanel.show(mode=\"floating\", collapsed=False, pause_on_expand=False)\nwait(1000)\npanel.show(mode=\"floating\", collapsed=True, dock_position=(100, 200))","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-values","kind":"METHOD","parentKey":"class-macropanel","name":"values","signature":"panel.values()","description":"คัดลอกค่าล่าสุดที่ถูกต้องหลัง show() การแก้แผงภายหลังไม่เปลี่ยนสำเนานี้ การแก้แผงลอยที่ถูกต้องบันทึกแบบ native และซิงก์ Storage ทันที หลัง close() values() คืนค่าสุดท้าย เรียกก่อน show() จะเกิดข้อผิดพลาด","behavior":"คัดลอกค่าล่าสุดที่ถูกต้องหลัง show() การแก้แผงภายหลังไม่เปลี่ยนสำเนานี้ การแก้แผงลอยที่ถูกต้องบันทึกแบบ native และซิงก์ Storage ทันที หลัง close() values() คืนค่าสุดท้าย เรียกก่อน show() จะเกิดข้อผิดพลาด","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"สร้างแต่ละแผงในโฟลว์เดียว กล่องโต้ตอบแสดงทีละกล่องและรอผู้ใช้ แผงลอยให้ทำงานต่อได้ error() หยุดทุกโฟลว์"},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"dict แยกต่างหากของชื่อช่องและค่า","example":"# อ่านค่าปัจจุบันจากหน้าต่างขนาดเล็กในแต่ละรอบของลูป\npanel = MacroPanel(\"Live controls\")\npanel.slider(\"speed\", min=1, max=10, default=5)\nconfig = panel.show(mode=\"floating\", anchor=\"free\", stop_button=True, width=320, height=240)\nfor index in range(10):\n    print(config[\"speed\"])\n    wait(1000)\nsnapshot = panel.values()\npanel.close()","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-close","kind":"METHOD","parentKey":"class-macropanel","name":"close","signature":"panel.close()","description":"ปิดแผงลอยนี้ ค่าที่รับไว้บันทึกแบบ native และซิงก์ Storage แล้ว รวมถึงขณะมาโครหยุดชั่วคราว การทำงานนี้ไม่หยุดมาโคร เรียกซ้ำหลัง show() ได้อย่างปลอดภัย และ values() ยังคืนค่าล่าสุด เรียกก่อน show() จะเกิดข้อผิดพลาด","behavior":"ปิดแผงลอยนี้ ค่าที่รับไว้บันทึกแบบ native และซิงก์ Storage แล้ว รวมถึงขณะมาโครหยุดชั่วคราว การทำงานนี้ไม่หยุดมาโคร เรียกซ้ำหลัง show() ได้อย่างปลอดภัย และ values() ยังคืนค่าล่าสุด เรียกก่อน show() จะเกิดข้อผิดพลาด","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"สร้างแต่ละแผงในโฟลว์เดียว กล่องโต้ตอบแสดงทีละกล่องและรอผู้ใช้ แผงลอยให้ทำงานต่อได้ error() หยุดทุกโฟลว์"},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"ไม่มีค่าส่งคืน","example":"# อ่านค่าปัจจุบันจากหน้าต่างขนาดเล็กในแต่ละรอบของลูป\npanel = MacroPanel(\"Live controls\")\npanel.slider(\"speed\", min=1, max=10, default=5)\nconfig = panel.show(mode=\"floating\", anchor=\"free\", stop_button=True, width=320, height=240)\nfor index in range(10):\n    print(config[\"speed\"])\n    wait(1000)\nsnapshot = panel.values()\npanel.close()","aliases":[],"group":"FLOW"},{"key":"class-system","kind":"CLASS","parentKey":null,"name":"System","signature":"System()","description":"เข้าถึงข้อมูลระบบ/อุปกรณ์รันไทม์และทริกเกอร์การดำเนินการระดับระบบจากสคริปต์","behavior":"เข้าถึงข้อมูลระบบ/อุปกรณ์รันไทม์และทริกเกอร์การดำเนินการระดับระบบจากสคริปต์","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["dev","battery","screen","memory"],"fieldDocs":[{"name":"dev","type":"dict","defaultValue":null,"description":"ข้อมูลอุปกรณ์ปัจจุบัน ได้แก่ isEmulator, ระดับ API Android sdk, รหัส language, darkmode, การรองรับ touch และความพร้อมของ capture อ่านอีกครั้งเพื่อรับข้อมูลใหม่","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"battery","type":"dict","defaultValue":null,"description":"ข้อมูลแบตเตอรี่ปัจจุบัน: percent ตั้งแต่ 0 ถึง 100, charging, temperature เป็นองศาเซลเซียส และ health เป็นข้อความ หากอ่าน percent หรือ temperature ไม่ได้จะเป็น -1 และ health ที่ไม่ทราบเป็น \"unknown\" อ่านใหม่เพื่ออัปเดต","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"screen","type":"dict","defaultValue":null,"description":"ข้อมูลหน้าจอปัจจุบัน: width และ height เป็นพิกเซล สเกล density, dpi และ orientation เป็นมุมหมุนจอหน่วยองศา (0, 90, 180 หรือ 270) อ่านใหม่หลังหมุนอุปกรณ์","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"memory","type":"dict","defaultValue":null,"description":"หน่วยความจำระบบปัจจุบัน: avail, total และ threshold ของหน่วยความจำต่ำเป็นไบต์ ส่วน low บอกว่าหน่วยความจำที่เหลือมีน้อย อ่านใหม่เพื่ออัปเดต","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"sys = System()\nprint(\"sdk=\", sys.sdk())\nbattery = System.battery()\nprint(\"battery=\", battery.percent, battery.charging)\nSystem.toast(\"Macro started\")\nSystem.play_noti()\nSystem.home()","aliases":[],"group":null},{"key":"class-system-static-method-time-ms","kind":"STATIC_METHOD","parentKey":"class-system","name":"time_ms","signature":"System.time_ms()","description":"อ่านวันเวลาปัจจุบันเป็นมิลลิวินาทีนับจาก 1970-01-01 00:00:00 UTC","behavior":"อ่านวันเวลาปัจจุบันเป็นมิลลิวินาทีนับจาก 1970-01-01 00:00:00 UTC","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number","returnDescription":"มิลลิวินาทีนับจาก 1970-01-01 00:00:00 UTC","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nstarted = System.time_ms()\nwait(100)\nprint(System.time_ms() - started)","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-app-version","kind":"STATIC_METHOD","parentKey":"class-system","name":"app_version","signature":"System.app_version()","description":"อ่านชื่อเวอร์ชัน CogniTab ที่ติดตั้ง","behavior":"อ่านชื่อเวอร์ชัน CogniTab ที่ติดตั้ง","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"String","returnDescription":"ชื่อเวอร์ชัน CogniTab หรือ \"unknown\" หากอ่านไม่ได้","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nprint(System.app_version())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-variant","kind":"STATIC_METHOD","parentKey":"class-system","name":"variant","signature":"System.variant()","description":"รับรหัสคงที่ของรูปแบบมาโครที่เลือกสำหรับการรันครั้งนี้","behavior":"รับรหัสคงที่ของรูปแบบมาโครที่เลือกสำหรับการรันครั้งนี้","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"String","returnDescription":"รหัสรูปแบบ เช่น `default` หรือ `pro_plus`","example":"# แยกเงื่อนไขตามรูปแบบมาโครปัจจุบัน\nif System.variant() == \"pro_plus\":\n    print(\"Pro Plus\")","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-open","kind":"STATIC_METHOD","parentKey":"class-system","name":"open","signature":"System.open(package_name)","description":"เปิดกิจกรรมเริ่มต้นของแอป Android ที่ติดตั้งไว้ CogniTab จะค้นหากิจกรรมตัวเปิดมาตรฐานหรือ Android TV จากชื่อแพ็กเกจ จึงไม่ต้องระบุคลาสกิจกรรม","behavior":"เปิดกิจกรรมเริ่มต้นของแอป Android ที่ติดตั้งไว้ CogniTab จะค้นหากิจกรรมตัวเปิดมาตรฐานหรือ Android TV จากชื่อแพ็กเกจ จึงไม่ต้องระบุคลาสกิจกรรม","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"package_name","type":"String","defaultValue":null,"description":"ชื่อแพ็กเกจของแอป Android เช่น `com.android.settings`","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"`True` เมื่อ Android ยอมรับ Intent สำหรับเปิดแอป และ `False` เมื่อไม่มีแอป ไม่มีกิจกรรมที่เปิดได้ หรือไม่สามารถเปิดได้","example":"# เปิดการตั้งค่า Android และจัดการกรณีที่ไม่สามารถเปิดแอปได้\nopened = System.open(\"com.android.settings\")\nif not opened:\n    System.toast(\"App is unavailable\")","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-sdk","kind":"STATIC_METHOD","parentKey":"class-system","name":"sdk","signature":"System.sdk()","description":"อ่านระดับ API ของ Android ที่อุปกรณ์นี้ใช้","behavior":"อ่านระดับ API ของ Android ที่อุปกรณ์นี้ใช้","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number","returnDescription":"ระดับ API ของ Android เป็นตัวเลข","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nprint(System.sdk())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-language","kind":"STATIC_METHOD","parentKey":"class-system","name":"language","signature":"System.language()","description":"รับรหัสภาษาปัจจุบัน","behavior":"รับรหัสภาษาปัจจุบัน","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"String","returnDescription":"รหัสภาษาสถานที่ (เช่น `en`, `vi`)","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nprint(System.language())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-dpi","kind":"STATIC_METHOD","parentKey":"class-system","name":"dpi","signature":"System.dpi()","description":"รับ DPI ของหน้าจอปัจจุบัน","behavior":"รับ DPI ของหน้าจอปัจจุบัน","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number","returnDescription":"แสดงความหนาแน่น DPI","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nprint(System.dpi())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-darkmode","kind":"STATIC_METHOD","parentKey":"class-system","name":"darkmode","signature":"System.darkmode()","description":"ตรวจสอบว่าเปิดใช้งานโหมดมืดหรือไม่","behavior":"ตรวจสอบว่าเปิดใช้งานโหมดมืดหรือไม่","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"'จริง' เมื่อใช้งานโหมดมืด","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nif System.darkmode():\n    print(\"Dark mode\")","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-play-noti","kind":"STATIC_METHOD","parentKey":"class-system","name":"play_noti","signature":"System.play_noti()","description":"เล่นเสียงแจ้งเตือนของระบบ","behavior":"เล่นเสียงแจ้งเตือนของระบบ","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"ไม่มีค่าส่งคืน","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nSystem.play_noti()","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-toast","kind":"STATIC_METHOD","parentKey":"class-system","name":"toast","signature":"System.toast(text)","description":"แสดงข้อความสั้นของ Android ย่อ list, dict และค่าที่มีโครงสร้างอื่นให้อ่านง่าย","behavior":"แสดงข้อความสั้นของ Android ย่อ list, dict และค่าที่มีโครงสร้างอื่นให้อ่านง่าย","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"text","type":"Any","defaultValue":null,"description":"Toast text or structured value to display compactly.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"ไม่มีค่าส่งคืน","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nSystem.toast(\"Macro started\")","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-stop","kind":"STATIC_METHOD","parentKey":"class-system","name":"stop","signature":"System.stop()","description":"หยุดแมโครปัจจุบันทันทีจากสคริปต์","behavior":"หยุดแมโครปัจจุบันทันทีจากสคริปต์","execution":{"blocking":"no","threadSafety":"serialized","parallel":"no","details":"หยุดทุกโฟลว์ของมาโคร บรรทัดถัดไปไม่ทำงาน ใช้ Flow.stop(name) หยุดโฟลว์เบื้องหลังเดียว"},"limitations":[],"relatedApis":["class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"หยุดการดำเนินการ ไม่มีการสังเกตค่าที่ส่งคืน","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nif Storage.get(\"stop_requested\", False):\n    System.stop()\nprint(\"Still running\")","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-minimized-dock","kind":"STATIC_METHOD","parentKey":"class-system","name":"minimized_dock","signature":"System.minimized_dock(point=None, *, width=None, height=None, alpha=None, mode=None)","description":"ค้นหาหรือปรับท่าเรือซ้อนทับที่ย่อเล็กสุด จุดใช้มาตราส่วนพิกัดและกฎจุดยึดเดียวกันกับเป้าหมายการคลิกตามจุด ความกว้างและความสูงเป็นพิกเซลของหน้าจอปัจจุบัน","behavior":"ค้นหาหรือปรับท่าเรือซ้อนทับที่ย่อเล็กสุด จุดใช้มาตราส่วนพิกัดและกฎจุดยึดเดียวกันกับเป้าหมายการคลิกตามจุด ความกว้างและความสูงเป็นพิกเซลของหน้าจอปัจจุบัน","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"point","type":"Point?","defaultValue":"None","description":"Optional top-left dock position.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"width","type":"Number?","defaultValue":"None","description":"ความกว้างพื้นที่ dock ที่ย่อแล้วเป็นพิกเซล ขณะมีแผงลอยที่ย่ออยู่ dock ใช้ขนาดตามธรรมชาติ โดยเก็บขนาดที่ขอไว้และนำกลับมาใช้เมื่อไม่มีแผงติดอยู่","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"height","type":"Number?","defaultValue":"None","description":"ความสูงพื้นที่ dock ที่ย่อแล้วเป็นพิกเซล ขณะมีแผงลอยที่ย่ออยู่ dock ใช้ขนาดตามธรรมชาติ โดยเก็บขนาดที่ขอไว้และนำกลับมาใช้เมื่อไม่มีแผงติดอยู่","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"alpha","type":"Number?","defaultValue":"None","description":"Optional dock opacity from 0.2 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"mode","type":"String?","defaultValue":"None","description":"รูปแบบ dock: icon, row หรือ hidden โดย icon คงปุ่มเปิดแผงลอยที่ย่ออยู่ hidden มีผลตลอดการรันนี้และคงปุ่มหยุดที่มุมซ้ายล่างเมื่อไม่มีปุ่มหยุดบนแผงลอยที่มองเห็นได้ เมื่อแผงย่อ หน้าต่างฉุกเฉินนี้มีปุ่มเปิดแผงด้วย","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"dict","returnDescription":"สถานะที่ใช้แล้วพร้อม `applied`, `x`, `y`, `width`, `height`, `alpha`, `mode` และ `reason` ที่ไม่บังคับ","example":"# ย้าย ปรับขนาด และยุบ dock แบบย่อเป็นไอคอนสำหรับการรันครั้งนี้\nSystem.minimized_dock(Point(24, 120), width=72, height=36, alpha=0.85, mode=\"icon\")","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-send-key","kind":"STATIC_METHOD","parentKey":"class-system","name":"send_key","signature":"System.send_key(key)","description":"ส่งเหตุการณ์กดและปล่อยปุ่ม Android หนึ่งคู่ไปยังช่องข้อความที่กำลังโฟกัสผ่าน Accessibility บน Android 13 ขึ้นไป โดยไม่ต้องหาตำแหน่งปุ่มบนแป้นพิมพ์หน้าจอ","behavior":"ส่งเหตุการณ์กดและปล่อยปุ่ม Android หนึ่งคู่ไปยังช่องข้อความที่กำลังโฟกัสผ่าน Accessibility บน Android 13 ขึ้นไป โดยไม่ต้องหาตำแหน่งปุ่มบนแป้นพิมพ์หน้าจอ","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"String|Number","defaultValue":null,"description":"ชื่อปุ่ม Android ไม่แยกตัวพิมพ์ใหญ่และเล็ก และใส่คำนำหน้า `KEYCODE_` ได้ เช่น `ENTER`, `TAB`, `ESCAPE`, `DEL`, `DPAD_LEFT`, `A` หรือ `F1` หรือระบุรหัสปุ่ม Android เป็นจำนวนเต็มบวก เช่น `66` สำหรับ Enter โดยจะตัดช่องว่างที่ต้นและท้ายชื่อออก","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"คืนค่า `True` เมื่อส่งเหตุการณ์ปุ่มทั้งสองแล้ว และ `False` บน Android 12L หรือต่ำกว่า เมื่อไม่รองรับปุ่มนั้น ไม่มีการเชื่อมต่อกับช่องข้อความที่กำลังใช้งาน หรือส่งไม่สำเร็จ แอปปลายทางเป็นผู้กำหนดวิธีจัดการปุ่ม จึงควรตรวจสอบหน้าจอก่อนดำเนินการต่อ ฟังก์ชันนี้ไม่ได้ส่งปุ่มฮาร์ดแวร์ให้ทั้งระบบหรือยืนยันว่าแอปจัดการปุ่มแล้ว","example":"# ส่งปุ่มไปยังช่องข้อความที่กำลังโฟกัสด้วยชื่อหรือรหัสปุ่ม Android\nsent = System.send_key(\"ENTER\")\nSystem.send_key(key=\"TAB\")\nSystem.send_key(66)","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-back","kind":"STATIC_METHOD","parentKey":"class-system","name":"back","signature":"System.back()","description":"ขอให้ Android ย้อนกลับ เหมือนกดปุ่ม Back","behavior":"ขอให้ Android ย้อนกลับ เหมือนกดปุ่ม Back","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` หาก Android ยอมรับคำสั่ง มิฉะนั้นเป็น `False`","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nprint(System.back())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-home","kind":"STATIC_METHOD","parentKey":"class-system","name":"home","signature":"System.home()","description":"ขอให้ Android เปิดหน้าจอหลัก","behavior":"ขอให้ Android เปิดหน้าจอหลัก","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` หาก Android ยอมรับคำสั่ง มิฉะนั้นเป็น `False`","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nprint(System.home())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-recent","kind":"STATIC_METHOD","parentKey":"class-system","name":"recent","signature":"System.recent()","description":"เปิดหน้าจอล่าสุด","behavior":"เปิดหน้าจอล่าสุด","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` หาก Android ยอมรับคำสั่ง มิฉะนั้นเป็น `False`","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nprint(System.recent())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-noti","kind":"STATIC_METHOD","parentKey":"class-system","name":"noti","signature":"System.noti()","description":"เปิดหน้าต่างแจ้งเตือน","behavior":"เปิดหน้าต่างแจ้งเตือน","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` หาก Android ยอมรับคำสั่ง มิฉะนั้นเป็น `False`","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nprint(System.noti())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-lockscreen","kind":"STATIC_METHOD","parentKey":"class-system","name":"lockscreen","signature":"System.lockscreen()","description":"ล็อคหน้าจอปัจจุบัน","behavior":"ล็อคหน้าจอปัจจุบัน","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` หาก Android ยอมรับคำสั่ง มิฉะนั้นเป็น `False`","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nprint(System.lockscreen())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-powerdialog","kind":"STATIC_METHOD","parentKey":"class-system","name":"powerdialog","signature":"System.powerdialog()","description":"เปิดกล่องโต้ตอบพลังงาน","behavior":"เปิดกล่องโต้ตอบพลังงาน","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` หาก Android ยอมรับคำสั่ง มิฉะนั้นเป็น `False`","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nprint(System.powerdialog())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-quicksetting","kind":"STATIC_METHOD","parentKey":"class-system","name":"quicksetting","signature":"System.quicksetting()","description":"เปิดการตั้งค่าด่วนของ Android","behavior":"เปิดการตั้งค่าด่วนของ Android","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` หาก Android ยอมรับคำสั่ง มิฉะนั้นเป็น `False`","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nprint(System.quicksetting())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-screenshot","kind":"STATIC_METHOD","parentKey":"class-system","name":"screenshot","signature":"System.screenshot()","description":"ขอให้ Android ถ่ายภาพหน้าจอ","behavior":"ขอให้ Android ถ่ายภาพหน้าจอ","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` หาก Android ยอมรับคำสั่ง มิฉะนั้นเป็น `False`","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nprint(System.screenshot())","aliases":[],"group":"FLOW"},{"key":"class-screencapture","kind":"CLASS","parentKey":null,"name":"ScreenCapture","signature":"ScreenCapture","description":"ควบคุมการใช้ภาพจับหน้าจอซ้ำในการตรวจจับระหว่างการรันมาโครปัจจุบัน โดยปกติใช้ภาพซ้ำได้นานถึง 100 ms เรียกเมธอดผ่าน ScreenCapture โดยตรง ไม่ต้องสร้างออบเจ็กต์","behavior":"ควบคุมการใช้ภาพจับหน้าจอซ้ำในการตรวจจับระหว่างการรันมาโครปัจจุบัน โดยปกติใช้ภาพซ้ำได้นานถึง 100 ms เรียกเมธอดผ่าน ScreenCapture โดยตรง ไม่ต้องสร้างออบเจ็กต์","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"เปลี่ยนการใช้ภาพเดิมสำหรับทุกโฟลว์ โดยไม่จับภาพ รอครบเวลา หรือขอสิทธิ์จับภาพ การจับภาพครั้งถัดไปใช้ค่านี้"},"limitations":[],"relatedApis":["class-region","class-flow"],"isCallable":false,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# ใช้เฟรมที่จับไว้หนึ่งเฟรมซ้ำสำหรับการตรวจหน้าจอหลายครั้ง\nScreenCapture.cache_on()\ncolor = Color.get(Point(500, 900))\nhit = Region.full_screen().find(\"enemy\", timeout=0)\nScreenCapture.cache_off()\n\n# ใช้เฟรมล่าสุดที่มีสำหรับการตรวจจับช่วงสั้น\nScreenCapture.auto_cache_off(duration_ms=1000)\nhit = Region.full_screen().find(\"enemy\", timeout=800, rate=30)\n\n# ปิดโดยไม่ตั้งเวลา แล้วเรียกเปิดแคชอัตโนมัติอีกครั้ง\nScreenCapture.auto_cache_off()\nhit = Region.full_screen().find(\"enemy\", timeout=2000, rate=30)\nScreenCapture.auto_cache_on()","aliases":[],"group":null},{"key":"class-screencapture-static-method-cache-on","kind":"STATIC_METHOD","parentKey":"class-screencapture","name":"cache_on","signature":"ScreenCapture.cache_on()","description":"เก็บภาพหน้าจอหนึ่งภาพไว้ตรวจซ้ำจนเรียก cache_off() หรือจบการรันมาโคร ใช้ภาพถัดไปที่มี หรือภาพล่าสุดที่ใช้ได้หากยังไม่มีภาพใหม่ โหมดนี้มีลำดับเหนือการใช้ภาพซ้ำอัตโนมัติและไม่ขอสิทธิ์จับภาพหน้าจอ","behavior":"เก็บภาพหน้าจอหนึ่งภาพไว้ตรวจซ้ำจนเรียก cache_off() หรือจบการรันมาโคร ใช้ภาพถัดไปที่มี หรือภาพล่าสุดที่ใช้ได้หากยังไม่มีภาพใหม่ โหมดนี้มีลำดับเหนือการใช้ภาพซ้ำอัตโนมัติและไม่ขอสิทธิ์จับภาพหน้าจอ","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"เปลี่ยนการใช้ภาพเดิมสำหรับทุกโฟลว์ โดยไม่จับภาพ รอครบเวลา หรือขอสิทธิ์จับภาพ การจับภาพครั้งถัดไปใช้ค่านี้"},"limitations":[],"relatedApis":["class-region","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"ไม่มีค่าส่งคืน","example":"# ตรึงเฟรมร่วมหนึ่งเฟรมสำหรับการตรวจจับสองรอบ\nScreenCapture.cache_on()\nregion = Region(100, 200, 300, 400)\nfirst = region.find(\"start\", 0)\nsecond = region.find(\"confirm\", 0)\nScreenCapture.cache_off()\nprint(first.found, second.found)","aliases":[],"group":"FLOW"},{"key":"class-screencapture-static-method-cache-off","kind":"STATIC_METHOD","parentKey":"class-screencapture","name":"cache_off","signature":"ScreenCapture.cache_off()","description":"หยุดเก็บภาพที่เลือกด้วย cache_on() การตั้งค่าใช้ภาพซ้ำอัตโนมัติไม่เปลี่ยน จึงอาจยังใช้ภาพล่าสุดซ้ำ เรียก auto_cache_off() ด้วยหากแต่ละครั้งต้องใช้ภาพใหม่ที่สุดที่มี","behavior":"หยุดเก็บภาพที่เลือกด้วย cache_on() การตั้งค่าใช้ภาพซ้ำอัตโนมัติไม่เปลี่ยน จึงอาจยังใช้ภาพล่าสุดซ้ำ เรียก auto_cache_off() ด้วยหากแต่ละครั้งต้องใช้ภาพใหม่ที่สุดที่มี","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"เปลี่ยนการใช้ภาพเดิมสำหรับทุกโฟลว์ โดยไม่จับภาพ รอครบเวลา หรือขอสิทธิ์จับภาพ การจับภาพครั้งถัดไปใช้ค่านี้"},"limitations":[],"relatedApis":["class-region","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"ไม่มีค่าส่งคืน","example":"# ยกเลิกการตรึงเฟรมก่อนสแกนครั้งถัดไป\nScreenCapture.cache_off()\nregion = Region(100, 200, 300, 400)\nprint(region.find(\"start\", 0).found)","aliases":[],"group":"FLOW"},{"key":"class-screencapture-static-method-auto-cache-off","kind":"STATIC_METHOD","parentKey":"class-screencapture","name":"auto_cache_off","signature":"ScreenCapture.auto_cache_off(duration_ms=None)","description":"ปิดการใช้ภาพซ้ำอัตโนมัติเพื่อให้คำขอจับภาพหาภาพล่าสุดที่มี คืนค่าทันที ระยะเวลาเริ่มจากการเรียกนี้และเรียกซ้ำจะเปลี่ยนระยะเวลาเดิม ใช้กับ bitmap ภาพดิบ TFLite และพิกเซล อาจเพิ่มการประมวลผลและใช้แบตเตอรี่มากขึ้นโดยไม่ทำงานเร็วขึ้นหรือบังคับ Android วาดพิกเซลใหม่ การรอภาพยังมีขีดจำกัด ไม่ยกเลิก cache_on() หรือขอสิทธิ์จับภาพ","behavior":"ปิดการใช้ภาพซ้ำอัตโนมัติเพื่อให้คำขอจับภาพหาภาพล่าสุดที่มี คืนค่าทันที ระยะเวลาเริ่มจากการเรียกนี้และเรียกซ้ำจะเปลี่ยนระยะเวลาเดิม ใช้กับ bitmap ภาพดิบ TFLite และพิกเซล อาจเพิ่มการประมวลผลและใช้แบตเตอรี่มากขึ้นโดยไม่ทำงานเร็วขึ้นหรือบังคับ Android วาดพิกเซลใหม่ การรอภาพยังมีขีดจำกัด ไม่ยกเลิก cache_on() หรือขอสิทธิ์จับภาพ","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"เปลี่ยนการใช้ภาพเดิมสำหรับทุกโฟลว์ โดยไม่จับภาพ รอครบเวลา หรือขอสิทธิ์จับภาพ การจับภาพครั้งถัดไปใช้ค่านี้"},"limitations":[],"relatedApis":["class-region","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"duration_ms","type":"Number | None","defaultValue":"None","description":"ระยะเวลาเป็นจำนวนเต็มบวกหน่วยมิลลิวินาที (100 และ 100.0 ใช้ได้) ละไว้หรือใช้ None เพื่อปิดจนเรียก auto_cache_on() หรือจบมาโคร ค่า 0 ค่าลบ เศษส่วน สตริง boolean และค่าเกินขอบเขตจะเกิดข้อผิดพลาด","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"ไม่มีค่าส่งคืน","example":"# ข้ามแคชอัตโนมัติชั่วคราว การตรึงเฟรมเป็นอีกการตั้งค่าหนึ่ง\nScreenCapture.cache_off()\nScreenCapture.auto_cache_off(1000)\nregion = Region(100, 200, 300, 400)\nprint(region.find(\"start\", 500).found)\nScreenCapture.auto_cache_on()","aliases":[],"group":"FLOW"},{"key":"class-screencapture-static-method-auto-cache-on","kind":"STATIC_METHOD","parentKey":"class-screencapture","name":"auto_cache_on","signature":"ScreenCapture.auto_cache_on()","description":"เปิดให้ใช้ภาพซ้ำอัตโนมัติทันที และยกเลิกช่วงปิดเดิม เมื่อจบการรันมาโครจะคืนโหมดนี้ด้วย ไม่ยกเลิก cache_on() ไม่ขอสิทธิ์จับภาพ และไม่รอ","behavior":"เปิดให้ใช้ภาพซ้ำอัตโนมัติทันที และยกเลิกช่วงปิดเดิม เมื่อจบการรันมาโครจะคืนโหมดนี้ด้วย ไม่ยกเลิก cache_on() ไม่ขอสิทธิ์จับภาพ และไม่รอ","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"เปลี่ยนการใช้ภาพเดิมสำหรับทุกโฟลว์ โดยไม่จับภาพ รอครบเวลา หรือขอสิทธิ์จับภาพ การจับภาพครั้งถัดไปใช้ค่านี้"},"limitations":[],"relatedApis":["class-region","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"ไม่มีค่าส่งคืน","example":"# คืนค่าการใช้เฟรมซ้ำอัตโนมัติตามปกติ\nScreenCapture.auto_cache_on()\nregion = Region(100, 200, 300, 400)\nprint(region.find(\"start\", 0).found)","aliases":[],"group":"FLOW"},{"key":"class-storage","kind":"CLASS","parentKey":null,"name":"Storage","signature":"Storage","description":"บันทึกค่าตามชื่อให้มาโครปัจจุบันใช้ในการรันครั้งต่อไป ทุกโฟลว์ในการรันเดียวกันใช้ Storage ร่วมกัน ตัวแปรปกติใช้ร่วมเฉพาะแอ็กชัน PYTHON_CODE ที่ทำตามลำดับในโฟลว์เดียว รวมถึงใน GROUP โฟลว์ขนานมีตัวแปรแยกกัน Storage ไม่ใช่ช่องส่งข้อความระหว่างโปรเซส","behavior":"บันทึกค่าตามชื่อให้มาโครปัจจุบันใช้ในการรันครั้งต่อไป ทุกโฟลว์ในการรันเดียวกันใช้ Storage ร่วมกัน ตัวแปรปกติใช้ร่วมเฉพาะแอ็กชัน PYTHON_CODE ที่ทำตามลำดับในโฟลว์เดียว รวมถึงใน GROUP โฟลว์ขนานมีตัวแปรแยกกัน Storage ไม่ใช่ช่องส่งข้อความระหว่างโปรเซส","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"โฟลว์ใช้ Storage ร่วมกัน แต่ละการทำงานรวมการแก้ในชุดข้อมูลที่เก็บไว้มีการป้องกัน โฟลว์อื่นอาจเขียนระหว่าง get() กับ set() ใช้โฟลว์เดียวเขียนเพื่อไม่ทับการอัปเดตนั้น"},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":false,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# บันทึกค่าให้ใช้ข้ามการรัน macro คนละครั้ง\nrun_count = Storage.get(\"run_count\", 0)\nrun_count = run_count + 1\nStorage.set(\"run_count\", run_count)\nStorage.set(\"last_point\", Point(500, 900))\nMacroPanel.notify(\"Run #\" + str(run_count))","aliases":[],"group":null},{"key":"class-storage-static-method-get","kind":"STATIC_METHOD","parentKey":"class-storage","name":"get","signature":"Storage.get(key, default=None)","description":"อ่านค่าที่คงอยู่หนึ่งค่าตามคีย์และเลือกที่จะถอยกลับไปเป็นค่าเริ่มต้นเมื่อคีย์หายไป","behavior":"อ่านค่าที่คงอยู่หนึ่งค่าตามคีย์และเลือกที่จะถอยกลับไปเป็นค่าเริ่มต้นเมื่อคีย์หายไป","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"โฟลว์ใช้ Storage ร่วมกัน แต่ละการทำงานรวมการแก้ในชุดข้อมูลที่เก็บไว้มีการป้องกัน โฟลว์อื่นอาจเขียนระหว่าง get() กับ set() ใช้โฟลว์เดียวเขียนเพื่อไม่ทับการอัปเดตนั้น"},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Key to look up.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"default","type":"Any?","defaultValue":"None","description":"Fallback value returned when the key is missing.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Any?","returnDescription":"ค่าที่เก็บไว้สำหรับคีย์นั้น หรือค่าเริ่มต้นที่ให้ไว้","example":"# กู้คืนตัวนับที่บันทึกไว้พร้อมค่าเริ่มต้นสำรอง\nrun_count = Storage.get(\"run_count\", 0)","aliases":[],"group":"FLOW"},{"key":"class-storage-static-method-set","kind":"STATIC_METHOD","parentKey":"class-storage","name":"set","signature":"Storage.set(key, value)","description":"บันทึกค่าตามคีย์ โดยแทนค่าเดิมหากมี รองรับ Number, String, Boolean, Point, Region, list, tuple, dict, set และ None และเก็บคอลเลกชันซ้อนกันได้","behavior":"บันทึกค่าตามคีย์ โดยแทนค่าเดิมหากมี รองรับ Number, String, Boolean, Point, Region, list, tuple, dict, set และ None และเก็บคอลเลกชันซ้อนกันได้","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"โฟลว์ใช้ Storage ร่วมกัน แต่ละการทำงานรวมการแก้ในชุดข้อมูลที่เก็บไว้มีการป้องกัน โฟลว์อื่นอาจเขียนระหว่าง get() กับ set() ใช้โฟลว์เดียวเขียนเพื่อไม่ทับการอัปเดตนั้น"},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Key to write.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"value","type":"Any?","defaultValue":null,"description":"Value to persist for that key.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"ไม่มีค่าคืน การอ่าน Storage อื่นเห็นการเปลี่ยนแปลงทันที บันทึกลงอุปกรณ์เมื่อไม่มีการเขียนใหม่เป็นเวลา 2 วินาที และบันทึกอีกครั้งเมื่อมาโครกับโฟลว์เบื้องหลังทั้งหมดจบ","example":"# บันทึกค่าสำหรับการรัน macro ครั้งถัดไป\nStorage.set(\"run_count\", 3)\nStorage.set(\"last_point\", Point(500, 900))","aliases":[],"group":"FLOW"},{"key":"class-storage-static-method-remove","kind":"STATIC_METHOD","parentKey":"class-storage","name":"remove","signature":"Storage.remove(key)","description":"ลบหนึ่งรายการที่มีอยู่และส่งกลับค่าเก่า","behavior":"ลบหนึ่งรายการที่มีอยู่และส่งกลับค่าเก่า","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"โฟลว์ใช้ Storage ร่วมกัน แต่ละการทำงานรวมการแก้ในชุดข้อมูลที่เก็บไว้มีการป้องกัน โฟลว์อื่นอาจเขียนระหว่าง get() กับ set() ใช้โฟลว์เดียวเขียนเพื่อไม่ทับการอัปเดตนั้น"},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Key to remove.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Any?","returnDescription":"ค่าที่ถูกลบออก หรือไม่มีเมื่อคีย์หายไป","example":"# ลบ flag ที่บันทึกไว้เมื่อไม่ต้องใช้แล้ว\nold_flag = Storage.remove(\"boost_enabled\")","aliases":[],"group":"FLOW"},{"key":"class-storage-static-method-contains","kind":"STATIC_METHOD","parentKey":"class-storage","name":"contains","signature":"Storage.contains(key)","description":"ตรวจสอบว่ามีคีย์ที่มีอยู่ในปัจจุบันหรือไม่","behavior":"ตรวจสอบว่ามีคีย์ที่มีอยู่ในปัจจุบันหรือไม่","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"โฟลว์ใช้ Storage ร่วมกัน แต่ละการทำงานรวมการแก้ในชุดข้อมูลที่เก็บไว้มีการป้องกัน โฟลว์อื่นอาจเขียนระหว่าง get() กับ set() ใช้โฟลว์เดียวเขียนเพื่อไม่ทับการอัปเดตนั้น"},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Key to test.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"\"จริง\" เมื่อมีคีย์อยู่ มิฉะนั้นจะเป็น \"เท็จ\"","example":"# คุม logic ตาม state ที่บันทึกไว้\nif Storage.contains(\"last_point\"):\n    MacroPanel.notify(\"Saved point is ready\")","aliases":[],"group":"FLOW"},{"key":"class-storage-static-method-keys","kind":"STATIC_METHOD","parentKey":"class-storage","name":"keys","signature":"Storage.keys()","description":"รับคีย์ที่มีอยู่ทั้งหมดเป็นรายการตามลำดับการแทรก","behavior":"รับคีย์ที่มีอยู่ทั้งหมดเป็นรายการตามลำดับการแทรก","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"โฟลว์ใช้ Storage ร่วมกัน แต่ละการทำงานรวมการแก้ในชุดข้อมูลที่เก็บไว้มีการป้องกัน โฟลว์อื่นอาจเขียนระหว่าง get() กับ set() ใช้โฟลว์เดียวเขียนเพื่อไม่ทับการอัปเดตนั้น"},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list","returnDescription":"รายการคีย์ที่มีอยู่","example":"# ตรวจดูว่าค่าใดถูกบันทึกไว้สำหรับ macro นี้\nsaved_keys = Storage.keys()","aliases":[],"group":"FLOW"},{"key":"class-storage-static-method-values","kind":"STATIC_METHOD","parentKey":"class-storage","name":"values","signature":"Storage.values()","description":"รับค่าที่มีอยู่ทั้งหมดเป็นรายการตามลำดับการแทรก","behavior":"รับค่าที่มีอยู่ทั้งหมดเป็นรายการตามลำดับการแทรก","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"โฟลว์ใช้ Storage ร่วมกัน แต่ละการทำงานรวมการแก้ในชุดข้อมูลที่เก็บไว้มีการป้องกัน โฟลว์อื่นอาจเขียนระหว่าง get() กับ set() ใช้โฟลว์เดียวเขียนเพื่อไม่ทับการอัปเดตนั้น"},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list","returnDescription":"รายการค่าที่มีอยู่","example":"# อ่านค่าที่บันทึกไว้ทั้งหมดเพื่อตรวจสอบอย่างรวดเร็ว\nsaved_values = Storage.values()","aliases":[],"group":"FLOW"},{"key":"class-storage-static-method-clear","kind":"STATIC_METHOD","parentKey":"class-storage","name":"clear","signature":"Storage.clear()","description":"ลบทุกรายการที่มีอยู่สำหรับแมโครปัจจุบัน","behavior":"ลบทุกรายการที่มีอยู่สำหรับแมโครปัจจุบัน","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"โฟลว์ใช้ Storage ร่วมกัน แต่ละการทำงานรวมการแก้ในชุดข้อมูลที่เก็บไว้มีการป้องกัน โฟลว์อื่นอาจเขียนระหว่าง get() กับ set() ใช้โฟลว์เดียวเขียนเพื่อไม่ทับการอัปเดตนั้น"},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"ไม่มีค่าตอบแทนโดยตรง ที่เก็บข้อมูลว่างเปล่า","example":"# รีเซ็ตค่า Storage ที่บันทึกไว้ทั้งหมด\nStorage.clear()","aliases":[],"group":"FLOW"},{"key":"class-storage-static-method-to-dict","kind":"STATIC_METHOD","parentKey":"class-storage","name":"to_dict","signature":"Storage.to_dict()","description":"รับ dict ที่ Storage ใช้ในการรันนี้ ทุกโฟลว์ใช้ร่วมกัน การเพิ่ม แก้ไข หรือลบรายการเปลี่ยน Storage ทันที บันทึกการแก้ไขเมื่อไม่มีการเขียนใหม่ 2 วินาที และอีกครั้งเมื่อมาโครกับโฟลว์เบื้องหลังทั้งหมดจบ","behavior":"รับ dict ที่ Storage ใช้ในการรันนี้ ทุกโฟลว์ใช้ร่วมกัน การเพิ่ม แก้ไข หรือลบรายการเปลี่ยน Storage ทันที บันทึกการแก้ไขเมื่อไม่มีการเขียนใหม่ 2 วินาที และอีกครั้งเมื่อมาโครกับโฟลว์เบื้องหลังทั้งหมดจบ","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"โฟลว์ใช้ Storage ร่วมกัน แต่ละการทำงานรวมการแก้ในชุดข้อมูลที่เก็บไว้มีการป้องกัน โฟลว์อื่นอาจเขียนระหว่าง get() กับ set() ใช้โฟลว์เดียวเขียนเพื่อไม่ทับการอัปเดตนั้น"},"limitations":[],"relatedApis":["class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"dict ของ Storage โดยตรง ไม่ใช่สำเนาแยก","example":"# อ่านและอัปเดต dictionary storage ที่บันทึกไว้ทั้งหมด\nstate = Storage.to_dict()\nstate[\"bonus\"] = 5\nMacroPanel.notify(str(state))","aliases":[],"group":"FLOW"},{"key":"function-click","kind":"FUNCTION","parentKey":null,"name":"click","signature":"click(target, hold_ms=0, offset=(0, 0), random=0, delay_before=0, delay_after=0, parallel=False)","description":"กดแล้วปล่อยที่จุดเป้าหมายแต่ละจุด โดยปกติจะรอให้การกดเสร็จก่อนทำงานต่อ ระบุอาร์กิวเมนต์ตามตำแหน่งหรือตามชื่อได้ตามลำดับที่ระบุไว้","behavior":"กดแล้วปล่อยที่จุดเป้าหมายแต่ละจุด โดยปกติจะรอให้การกดเสร็จก่อนทำงานต่อ ระบุอาร์กิวเมนต์ตามตำแหน่งหรือตามชื่อได้ตามลำดับที่ระบุไว้","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"parallel=True จัดคิวสัมผัส แต่ delay_before, delay_after ยังรอนอก collect ใช้ Touch.collect() รวม send() ส่ง และ wait() รอจนเสร็จ การสัมผัสจากต่างโฟลว์อาจรบกวนกัน"},"limitations":[],"relatedApis":["class-touch-static-method-collect","class-touch-static-method-send","class-touch-static-method-wait"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"target","type":"Point | tuple[Number, Number] | Match | MatchList","defaultValue":null,"description":"Point, พิกัดพิกเซลคงที่ (x, y) หรือผลการค้นหา ใช้ Point เมื่อต้องการปรับสเกลหรือยึดตำแหน่ง กดทุกจุดที่พบ และไม่ทำอะไรหากไม่พบจุด","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"hold_ms","type":"Int","defaultValue":"0","description":"ระยะเวลากดค้าง หน่วยมิลลิวินาที","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"offset","type":"tuple[Number, Number]","defaultValue":"(0, 0)","description":"ระยะเยื้องแนวนอนและแนวตั้งเป็นพิกเซล ที่บวกกับพิกัดเป้าหมายสุดท้าย","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"random","type":"Number | tuple[Number, Number]","defaultValue":"0","description":"ระยะเยื้องสุ่มสูงสุดเป็นพิกเซลในแต่ละทิศทางจากเป้าหมาย ตัวเลขเดียวใช้กับทั้งสองแกน ส่วน (x, y) กำหนดแต่ละแกนแยกกัน ค่าลบจะถูกเปลี่ยนเป็น 0","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"delay_before","type":"Number","defaultValue":"0","description":"เวลารอก่อนกด หน่วยมิลลิวินาที","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"delay_after","type":"Number","defaultValue":"0","description":"เวลารอหลังกด หน่วยมิลลิวินาที","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"parallel","type":"Boolean","defaultValue":"False","description":"True: นำการแตะเข้าคิวและคืนรหัสตัวเลขโดยไม่รอให้เสร็จ หลัง Touch.collect() จะรอ Touch.send(); การแตะที่รวบรวมไว้สามารถทำงานซ้อนกันด้วยค่า delay_before ต่างกันได้ ยกเลิกด้วย Touch.cancel(id) หรือยกเลิกทั้งหมดด้วย Touch.cancel()","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Number | list[Number] | None","returnDescription":"เมื่อ parallel=True: คืนรหัสการแตะหนึ่งรหัสสำหรับหนึ่งจุด หรือรายการรหัสสำหรับหลายจุด กรณีอื่นหรือไม่พบจุดใด: None","example":"# แตะพิกัดหน้าจอด้วย Point หรือ tuple\nclick(Point(500, 900))\nclick((500, 900))\nclick((500, 900), hold_ms=200)\nclick(Point(500, 900), 0, (0, 0), 10, 0, 500)\n\nmatch = Region(100, 200, 300, 400).find(\"start\", 3000)\nif match.found:\n    click(match, offset=(0, 6))\n\nhits = Region(100, 200, 300, 400).find_any([\"a\", \"b\"], 3000)\nif hits:\n    click(hits, random=0)\n\n# รวมการแตะพร้อมกันสองรายการ ส่งพร้อมกัน แล้วรอคิว\nTouch.collect()\na = click(Point(300, 900), parallel=True)\nb = click(Point(780, 900), parallel=True)\nTouch.send()\nTouch.wait()\n\n# กด p1 ค้างไว้ แล้วแตะ p2 หลัง 1 วินาทีโดยไม่ปล่อย p1\nTouch.collect()\np1 = click(Point(300, 900), hold_ms=5000, parallel=True)\np2 = click(Point(780, 900), hold_ms=1000, delay_before=1000, parallel=True)\nTouch.send()\nTouch.cancel(p1)\nTouch.wait()","aliases":[],"group":"GESTURE"},{"key":"function-swipe","kind":"FUNCTION","parentKey":null,"name":"swipe","signature":"swipe(points, *, parallel=False)","description":"เลื่อนหนึ่งนิ้วผ่านค่า SwipePoint ตามลำดับ โดยปกติจะรอให้การปัดเสร็จก่อนทำงานต่อ","behavior":"เลื่อนหนึ่งนิ้วผ่านค่า SwipePoint ตามลำดับ โดยปกติจะรอให้การปัดเสร็จก่อนทำงานต่อ","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"parallel=True จัดคิวสัมผัส แต่ delay_before, delay_after ยังรอนอก collect ใช้ Touch.collect() รวม send() ส่ง และ wait() รอจนเสร็จ การสัมผัสจากต่างโฟลว์อาจรบกวนกัน"},"limitations":[],"relatedApis":["class-touch-static-method-collect","class-touch-static-method-send","class-touch-static-method-wait"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"points","type":"list[SwipePoint]","defaultValue":null,"description":"Flat path for one finger. Requires at least 2 points.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"parallel","type":"Boolean","defaultValue":"False","description":"True: นำการปัดเข้าคิวโดยไม่รอให้เสร็จ หลัง Touch.collect() จะรอ Touch.send() ยกเลิกด้วย Touch.cancel(id) หรือยกเลิกทั้งหมดด้วย Touch.cancel()","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"Number | None","returnDescription":"ส่งกลับรหัสตัวเลขเฉพาะเมื่อ Parallel=True; มิฉะนั้นไม่มี","example":"path = [\n    SwipePoint(Point(500, 1500), speed=\"FAST\"),\n    SwipePoint((560, 980), speed=\"NORMAL\", humanized=True),\n    SwipePoint(Point(500, 500))\n]\nswipe(path)\n\nTouch.collect()\nleft = swipe(path, parallel=True)\nright = swipe([\n    SwipePoint(Point(780, 1500), speed=\"FAST\"),\n    SwipePoint(Point(780, 500))\n], parallel=True)\nTouch.send()\nTouch.wait()","aliases":[],"group":"GESTURE"},{"key":"function-wait","kind":"FUNCTION","parentKey":null,"name":"wait","signature":"wait(ms, /)","description":"หยุดการทำงานของสคริปต์ชั่วคราวตามจำนวนมิลลิวินาทีที่กำหนด","behavior":"หยุดการทำงานของสคริปต์ชั่วคราวตามจำนวนมิลลิวินาทีที่กำหนด","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"รอครบเวลาหรือสัมผัสเสร็จ โฟลว์อื่นทำต่อได้ การพักและหยุดยังมีผล"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"ms","type":"Int","defaultValue":null,"description":"ระยะเวลารอเป็นมิลลิวินาที ค่าลบจะถูกเปลี่ยนเป็น 0 ยังสามารถพักหรือหยุดมาโครระหว่างรอได้","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"ไม่มีค่าส่งคืน","example":"click(Point(500, 900))\nwait(1000)  # รอ 1 วินาที\nclick(Point(500, 900))","aliases":["sleep"],"group":"FLOW"},{"key":"function-text","kind":"FUNCTION","parentKey":null,"name":"text","signature":"text(value, /, focus_index=0)","description":"แทนที่เนื้อหาในช่องข้อความที่แก้ไขได้ด้วย value","behavior":"แทนที่เนื้อหาในช่องข้อความที่แก้ไขได้ด้วย value","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"String","defaultValue":null,"description":"Text to input","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"focus_index","type":"Int","defaultValue":"0","description":"0: ใช้ช่องที่แก้ไขได้ซึ่งมีโฟกัสอยู่ หรือช่องแรกหากไม่มีช่องใดมีโฟกัส N >= 1: โฟกัสและใช้ช่องที่แก้ไขได้ลำดับที่ N","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"None หากไม่พบช่องที่แก้ไขได้ จะไม่มีการป้อนข้อความ","example":"click(Point(300, 500))  # แตะช่องป้อนข้อความ\nwait(200)\ntext(\"Hello World\", 1)","aliases":[],"group":"INPUT"},{"key":"function-range","kind":"FUNCTION","parentKey":null,"name":"range","signature":"range(stop, /) | range(start, stop, step=1, /)","description":"สร้างลำดับของจำนวนเต็มเพื่อใช้ใน for-loop","behavior":"สร้างลำดับของจำนวนเต็มเพื่อใช้ใน for-loop","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"start","type":"Int","defaultValue":"0","description":"Start value (inclusive)","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":null,"description":"End value (exclusive)","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"step","type":"Int","defaultValue":"1","description":"ผลต่างระหว่างค่าที่อยู่ติดกัน ใช้ค่าลบเพื่อนับถอยหลัง; 0 ทำให้เกิดข้อผิดพลาด","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"}],"returnType":"range","returnDescription":"ลำดับจำนวนเต็มที่แก้ไขไม่ได้และวนซ้ำได้ โดยสิ้นสุดก่อน stop จะว่างเมื่อ step เดินออกห่างจาก stop ใช้ list(result) เมื่อต้องการรายการที่แก้ไขได้","example":"# คลิกซ้ำที่ห้าตำแหน่งซึ่งเว้นระยะเท่ากัน\nnumbers = range(5)\n\nfor i in numbers:\n    click(Point(100 + i * 50, 500))  # คืนค่า None","aliases":[],"group":"FLOW"},{"key":"function-enumerate","kind":"FUNCTION","parentKey":null,"name":"enumerate","signature":"enumerate(iterable, start=0)","description":"ใส่หมายเลขให้สมาชิกนำเข้าในขณะที่วนซ้ำ","behavior":"ใส่หมายเลขให้สมาชิกนำเข้าในขณะที่วนซ้ำ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","defaultValue":null,"description":"Value to enumerate. Dictionaries enumerate keys.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"start","type":"Int","defaultValue":"0","description":"First index value.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"enumerate","returnDescription":"ตัววนซ้ำแบบใช้ครั้งเดียวที่ให้คู่ (index, item) อ่านสมาชิกเมื่อจำเป็นเท่านั้น ใช้ list(result) เพื่อเก็บคู่เหล่านี้","example":"# ใส่หมายเลขรายการก่อนใช้งาน\nnames = [\"alpha\", \"beta\"]\nfor pair in enumerate(names, start=1):\n    text(str(pair[0]) + \": \" + pair[1])","aliases":[],"group":"COLLECTION"},{"key":"function-zip","kind":"FUNCTION","parentKey":null,"name":"zip","signature":"zip(*iterables, strict=False)","description":"จับคู่สมาชิกที่อยู่ตำแหน่งเดียวกันของแต่ละข้อมูลนำเข้าขณะวนซ้ำ","behavior":"จับคู่สมาชิกที่อยู่ตำแหน่งเดียวกันของแต่ละข้อมูลนำเข้าขณะวนซ้ำ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterables","type":"Iterable","defaultValue":null,"description":"Values to combine. Dictionaries contribute keys.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"},{"name":"strict","type":"Boolean","defaultValue":"False","description":"False: หยุดที่ข้อมูลนำเข้าที่สั้นที่สุด True: แจ้งข้อผิดพลาดระหว่างอ่านหากข้อมูลนำเข้ายาวไม่เท่ากัน ระบุอาร์กิวเมนต์ด้วยชื่อ","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"zip","returnDescription":"ตัววนซ้ำแบบใช้ครั้งเดียวที่ให้ tuple ซึ่งมีสมาชิกหนึ่งตัวจากแต่ละข้อมูลนำเข้า ใช้ list(result) เพื่อเก็บ tuple เหล่านี้","example":"# จับคู่ป้ายกำกับกับจุดแตะ\nlabels = [\"left\", \"right\"]\npoints = [Point(100, 500), Point(900, 500)]\nfor pair in zip(labels, points):\n    text(pair[0])\n    click(pair[1])","aliases":[],"group":"COLLECTION"},{"key":"function-random","kind":"FUNCTION","parentKey":null,"name":"random","signature":"random()","description":"ส่งกลับตัวเลขทศนิยมแบบสุ่มในช่วง 0 -> 1","behavior":"ส่งกลับตัวเลขทศนิยมแบบสุ่มในช่วง 0 -> 1","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Float","returnDescription":"ค่าจุดลอยตัวแบบสุ่มใน 0 -> 1 (1 เป็นเอกสิทธิ์)","example":"chance = random()\nif chance < 0.25:\n    text(\"lucky\")","aliases":[],"group":"FLOW"},{"key":"function-random-int","kind":"FUNCTION","parentKey":null,"name":"random_int","signature":"random_int(min, max, /)","description":"ส่งกลับจำนวนเต็มสุ่มในช่วงขั้นต่ำ -> สูงสุด","behavior":"ส่งกลับจำนวนเต็มสุ่มในช่วงขั้นต่ำ -> สูงสุด","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"min","type":"Int","defaultValue":null,"description":"Lower bound of the range.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"max","type":"Int","defaultValue":null,"description":"Upper bound of the range.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"จำนวนเต็มสุ่มระหว่างต่ำสุดและสูงสุด (รวม)","example":"delay_steps = random_int(1, 4)\nwait(delay_steps * 100)","aliases":[],"group":"FLOW"},{"key":"function-len","kind":"FUNCTION","parentKey":null,"name":"len","signature":"len(value, /)","description":"รับขนาดของสตริง รายการ/สิ่งอันดับ หรือ dict","behavior":"รับขนาดของสตริง รายการ/สิ่งอันดับ หรือ dict","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"String | list | tuple | dict","defaultValue":null,"description":"Value to measure","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"จำนวนรายการ/ตัวอักษร","example":"name = \"CogniTab\"\ncount = len(name)\ntext(str(count))","aliases":[],"group":"COLLECTION"},{"key":"function-all","kind":"FUNCTION","parentKey":null,"name":"all","signature":"all(iterable, /)","description":"คืน False เมื่อพบสมาชิก falsy ตัวแรก มิฉะนั้นคืน True รวมถึง iterable ว่าง ใช้การวนซ้ำและทดสอบค่าความจริงตามปกติ รองรับการหยุดชั่วคราวและหยุด","behavior":"คืน False เมื่อพบสมาชิก falsy ตัวแรก มิฉะนั้นคืน True รวมถึง iterable ว่าง ใช้การวนซ้ำและทดสอบค่าความจริงตามปกติ รองรับการหยุดชั่วคราวและหยุด","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"วนซ้ำในโฟลว์ปัจจุบันและหยุดเมื่อพบค่า falsy แรก การวนซ้ำหรือทดสอบค่าอาจเรียกโค้ดผู้ใช้หรือรอโฮสต์ ข้อผิดพลาดจะถูกส่งต่อ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","defaultValue":null,"description":"คอลเลกชันหรือ iterable ที่ต้องการตรวจสอบ","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":null,"example":"# ตรวจสอบว่าทุกคะแนนผ่าน\nscores = [0.9, 0.95]\nprint(all(score >= 0.85 for score in scores))","aliases":[],"group":"COLLECTION"},{"key":"function-any","kind":"FUNCTION","parentKey":null,"name":"any","signature":"any(iterable, /)","description":"คืนค่า True หากมีอย่างน้อยหนึ่งรายการใน iterable ที่เป็นค่าจริง (truthy) โดยหยุดที่รายการแรกที่เป็นจริง และคืนค่า False เมื่อ iterable ว่างหรือทุกรายการเป็นเท็จ (falsy)","behavior":"คืนค่า True หากมีอย่างน้อยหนึ่งรายการใน iterable ที่เป็นค่าจริง (truthy) โดยหยุดที่รายการแรกที่เป็นจริง และคืนค่า False เมื่อ iterable ว่างหรือทุกรายการเป็นเท็จ (falsy)","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","defaultValue":null,"description":"คอลเลกชัน, String, range, ตัววนซ้ำ หรือนิพจน์เจเนอเรเตอร์ที่ต้องการตรวจสอบ ค่าที่ไม่สามารถวนซ้ำได้จะเกิด TypeError","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":"True เมื่อมีรายการใดเป็นค่าจริง มิฉะนั้นเป็น False","example":"scores = [0.42, 0.91, 0.65]\nhas_match = any(score >= 0.85 for score in scores)\nif has_match:\n    text(\"found\")","aliases":[],"group":"COLLECTION"},{"key":"function-globals","kind":"FUNCTION","parentKey":null,"name":"globals","signature":"globals()","description":"คืนค่า dict แบบสดของตัวแปร ฟังก์ชัน และคลาสระดับโกลบอลของสคริปต์ในการรันปัจจุบัน","behavior":"คืนค่า dict แบบสดของตัวแปร ฟังก์ชัน และคลาสระดับโกลบอลของสคริปต์ในการรันปัจจุบัน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"dict แบบสดของชื่อระดับโกลบอล การอ่านและอัปเดตด้วยคีย์สตริงจะมีผลกับขอบเขตโกลบอลโดยตรง ส่วนคีย์ที่ไม่ใช่สตริงหรือการแก้ไข Recognition จะเกิดข้อผิดพลาด","example":"status = \"ready\"\nif \"status\" in globals():\n    text(str(globals()[\"status\"]))","aliases":[],"group":"COLLECTION"},{"key":"function-int","kind":"FUNCTION","parentKey":null,"name":"int","signature":"int(value=0, /)","description":"แปลง value เป็นจำนวนเต็มโดยตัดส่วนทศนิยมของข้อมูลตัวเลขออก ข้อความต้องเป็นจำนวนเต็ม; ข้อความที่มีทศนิยมทำให้เกิดข้อผิดพลาด True กลายเป็น 1 และ False กลายเป็น 0","behavior":"แปลง value เป็นจำนวนเต็มโดยตัดส่วนทศนิยมของข้อมูลตัวเลขออก ข้อความต้องเป็นจำนวนเต็ม; ข้อความที่มีทศนิยมทำให้เกิดข้อผิดพลาด True กลายเป็น 1 และ False กลายเป็น 0","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float | Boolean | String","defaultValue":"0","description":"Value to cast","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"ค่าจำนวนเต็มที่แปลงแล้ว","example":"threshold = int(3.9)\ntext(str(threshold))","aliases":[],"group":"TYPE_CAST"},{"key":"function-float","kind":"FUNCTION","parentKey":null,"name":"float","signature":"float(value=0.0, /)","description":"แปลง value เป็นเลขทศนิยม ข้อความต้องเป็นตัวเลขที่ถูกต้อง; True กลายเป็น 1.0 และ False กลายเป็น 0.0","behavior":"แปลง value เป็นเลขทศนิยม ข้อความต้องเป็นตัวเลขที่ถูกต้อง; True กลายเป็น 1.0 และ False กลายเป็น 0.0","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float | Boolean | String","defaultValue":"0.0","description":"Value to cast","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"ค่าจุดลอยตัวที่แปลงแล้ว","example":"score = float(\"0.85\")\nif score > 0.8:\n    text(\"ok\")","aliases":[],"group":"TYPE_CAST"},{"key":"function-str","kind":"FUNCTION","parentKey":null,"name":"str","signature":"str(value=\"\", /)","description":"แปลง value เป็นข้อความ โดยคงสตริงเดิมไว้ ตัวเลขและคอลเลกชันมาตรฐานใช้รูปแบบข้อความของ Python","behavior":"แปลง value เป็นข้อความ โดยคงสตริงเดิมไว้ ตัวเลขและคอลเลกชันมาตรฐานใช้รูปแบบข้อความของ Python","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any","defaultValue":"\"\"","description":"Value to convert","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"String","returnDescription":"รูปแบบข้อความของค่า","example":"total = 12\ntext(\"Total: \" + str(total))","aliases":[],"group":"TYPE_CAST"},{"key":"function-type","kind":"FUNCTION","parentKey":null,"name":"type","signature":"type(value, /)","description":"ส่งกลับสตริงอธิบายคลาสที่มีลักษณะคล้าย Python สำหรับค่า เช่น <class 'int'>","behavior":"ส่งกลับสตริงอธิบายคลาสที่มีลักษณะคล้าย Python สำหรับค่า เช่น <class 'int'>","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any","defaultValue":null,"description":"Value to inspect","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"String","returnDescription":"ตัวอธิบายประเภทคล้าย Python","example":"value = 42\nprint(type(value))","aliases":[],"group":"TYPE_CAST"},{"key":"function-isinstance","kind":"FUNCTION","parentKey":null,"name":"isinstance","signature":"isinstance(value, class_or_tuple, /)","description":"ตรวจสอบว่าค่าเป็นชนิดในตัว คลาสค่าของ DSL หรือคลาสที่ผู้ใช้กำหนดเอง โดยไม่แปลงค่า","behavior":"ตรวจสอบว่าค่าเป็นชนิดในตัว คลาสค่าของ DSL หรือคลาสที่ผู้ใช้กำหนดเอง โดยไม่แปลงค่า","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any","defaultValue":null,"description":"ค่าที่ต้องการตรวจสอบ","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"class_or_tuple","type":"Type | tuple[Type, ...]","defaultValue":null,"description":"ใช้การอ้างอิงชนิดโดยไม่ใส่เครื่องหมายคำพูด: bool, int, float, str, list, tuple, dict, set, range, enumerate, zip; คลาสค่าของ DSL เช่น Point, Match หรือ AudioMatch; หรือคลาสที่ผู้ใช้กำหนดเอง tuple สามารถซ้อนกันได้และตรวจสอบจากซ้ายไปขวาจนกว่าจะพบค่าที่ตรงกัน หากพบรายการที่ไม่ถูกต้องก่อนพบค่าที่ตรงกันจะเกิด TypeError ไม่รับสตริงหรือ type(value) เพราะ type() ส่งคืนข้อความ ส่วน Flow, System, Storage, Touch, ScreenCapture และ Recognition เป็นเนมสเปซหรือบริบท ไม่ใช่ชนิด","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":"คืนค่า True เมื่อชนิดตรงกัน มิฉะนั้นคืนค่า False รวมถึงเมื่อ tuple ว่าง bool ตรงกับ int ด้วย ส่วน int และ float เป็นคนละชนิด คลาสที่ผู้ใช้กำหนดเองจะเปรียบเทียบตามการกำหนดคลาส แม้จะมีชื่อเหมือนกัน","example":"# ตรวจสอบชนิดของค่าก่อนใช้งาน\nvalue = 42\nif isinstance(value, (int, float)):\n    print(value + 1)\nprint(isinstance(Point(10, 20), Point))","aliases":[],"group":"TYPE_CAST"},{"key":"function-hasattr","kind":"FUNCTION","parentKey":null,"name":"hasattr","signature":"hasattr(object, name, /)","description":"ตรวจสอบว่าออบเจ็กต์มีแอตทริบิวต์หรือเมธอดหรือไม่ โดยใช้การค้นหาแอตทริบิวต์ตามปกติของ DSL และไม่เรียกเมธอด","behavior":"ตรวจสอบว่าออบเจ็กต์มีแอตทริบิวต์หรือเมธอดหรือไม่ โดยใช้การค้นหาแอตทริบิวต์ตามปกติของ DSL และไม่เรียกเมธอด","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"ค้นหาแอตทริบิวต์ตามปกติโดยไม่เรียกเมธอด การอ่านแอตทริบิวต์อาจอ่านสถานะปัจจุบันจากโฮสต์ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"object","type":"Any","defaultValue":null,"description":"ออบเจ็กต์หรือเนมสเปซที่ต้องการตรวจสอบ","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"name","type":"String","defaultValue":null,"description":"ชื่อแอตทริบิวต์หรือเมธอด หากไม่ใช่สตริงจะเกิด TypeError","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":"คืน True เมื่อมีแอตทริบิวต์ แม้ค่าจะเป็น None, False หรือ 0 คืน False เฉพาะเมื่อไม่มีแอตทริบิวต์ ส่วนข้อผิดพลาดอื่นระหว่างค้นหายังคงถูกรายงาน คีย์ของ dict ใช้กฎการเข้าถึงด้วยจุดของ DSL","example":"# อ่านพิกัดเฉพาะเมื่อมีแอตทริบิวต์นั้น\nvalue = Point(10, 20)\nif hasattr(value, \"x\"):\n    print(value.x)\nprint(hasattr(value, \"missing\"))","aliases":[],"group":"TYPE_CAST"},{"key":"function-print","kind":"FUNCTION","parentKey":null,"name":"print","signature":"print(*values, sep=\" \", end=\"\\n\")","description":"เขียนค่าลงในคอนโซลสคริปต์บนหน้าต่างลอยแล้วทำงานต่อ โดยใช้ข้อความแบบเดียวกับ str(value)","behavior":"เขียนค่าลงในคอนโซลสคริปต์บนหน้าต่างลอยแล้วทำงานต่อ โดยใช้ข้อความแบบเดียวกับ str(value)","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"การรอขึ้นกับ API ให้แต่ละโฟลว์แก้ออบเจ็กต์แยกกัน การแก้ออบเจ็กต์เดียวจากหลายโฟลว์อาจให้ผลที่ไม่คาดคิด"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"values","type":"Any","defaultValue":null,"description":"Values to print","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"},{"name":"sep","type":"String","defaultValue":"\" \"","description":"Separator between values","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"end","type":"String","defaultValue":"\"\\n\"","description":"Suffix appended after each print call","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"None","returnDescription":"ไม่มีค่าส่งคืน","example":"count = 3\nprint(\"remaining\", count, sep=\": \")\nprint(\"done\", end=\"\")","aliases":[],"group":"FLOW"},{"key":"function-bool","kind":"FUNCTION","parentKey":null,"name":"bool","signature":"bool(value=False, /)","description":"แปลง value เป็น True หรือ False เพื่อใช้ในเงื่อนไข","behavior":"แปลง value เป็น True หรือ False เพื่อใช้ในเงื่อนไข","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any","defaultValue":"False","description":"Value to convert","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":"False สำหรับ None, False, 0 หรือข้อความ/คอลเลกชันว่าง ส่วน Match ใช้ค่า found ของตัวเอง กรณีอื่นคืน True","example":"enabled = bool(1)\nif enabled:\n    text(\"enabled\")","aliases":[],"group":"TYPE_CAST"},{"key":"function-abs","kind":"FUNCTION","parentKey":null,"name":"abs","signature":"abs(value, /)","description":"ส่งกลับค่าสัมบูรณ์","behavior":"ส่งกลับค่าสัมบูรณ์","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Input number","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int | Float","returnDescription":"ค่าตัวเลขสัมบูรณ์","example":"delta = abs(-12.5)\ntext(str(delta))","aliases":[],"group":"MATH"},{"key":"function-sum","kind":"FUNCTION","parentKey":null,"name":"sum","signature":"sum(iterable, /, start=0)","description":"บวกตัวเลขนำเข้ากับ start แล้วคืนผลรวม","behavior":"บวกตัวเลขนำเข้ากับ start แล้วคืนผลรวม","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"list | tuple | set | generator","defaultValue":null,"description":"คอลเลกชันหรือ generator ที่ให้ตัวเลขทีละค่า นิพจน์ generator ต้องมีวงเล็บของตัวเองหากมีอาร์กิวเมนต์อื่นหรือจุลภาคปิดท้ายตามมา","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Number","defaultValue":"0","description":"Initial value added before iterable items.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Number","returnDescription":"ค่าตัวเลขทั้งหมด","example":"# รวมค่าที่สร้างโดย generator\nvalues = [1, 2, 3]\ntotal = sum(value * 2 for value in values)\nwith_start = sum((value * 2 for value in values), start=10)\ntext(str(total))\ntext(str(with_start))","aliases":[],"group":"MATH"},{"key":"function-min","kind":"FUNCTION","parentKey":null,"name":"min","signature":"min(iterable, /, *, key=None) | min(iterable, /, *, default, key=None) | min(arg1, arg2, /, *args, key=None)","description":"ส่งคืนรายการที่เล็กที่สุดจากอาร์กิวเมนต์ที่ทำซ้ำได้หนึ่งรายการหรืออาร์กิวเมนต์ที่น้อยที่สุดจากสองอาร์กิวเมนต์ขึ้นไป คีย์สามารถคำนวณค่าที่ใช้ในการสั่งซื้อได้ ความสัมพันธ์จะเก็บสิ่งแรกที่พบ","behavior":"ส่งคืนรายการที่เล็กที่สุดจากอาร์กิวเมนต์ที่ทำซ้ำได้หนึ่งรายการหรืออาร์กิวเมนต์ที่น้อยที่สุดจากสองอาร์กิวเมนต์ขึ้นไป คีย์สามารถคำนวณค่าที่ใช้ในการสั่งซื้อได้ ความสัมพันธ์จะเก็บสิ่งแรกที่พบ","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"ประมวลผลค่าในโฟลว์ปัจจุบัน ฟังก์ชัน key ทำงานที่นั่นด้วย การรอและการเปลี่ยนค่าของมันเกิดก่อนคืนค่า"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"String | list | tuple | dict","defaultValue":null,"description":"ค่าที่สามารถอ่านสมาชิกทีละตัวได้ เช่น รายการหรือสตริง สำหรับ dict จะเปรียบเทียบคีย์","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"},{"name":"args","type":"Any","defaultValue":null,"description":"Additional positional values when passing two or more arguments.","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"variadic"},{"name":"default","type":"Any","defaultValue":"-","description":"Value returned when the single iterable is empty. Only valid with one iterable argument.","suggestAsNamedArg":true,"requirement":"overload-dependent","callingMode":"keyword-only"},{"name":"key","type":"Callable?","defaultValue":"None","description":"ฟังก์ชันที่เรียกด้วยสมาชิกแต่ละตัว แล้วนำผลลัพธ์มาเปรียบเทียบแทนสมาชิก หากเป็น None จะเปรียบเทียบสมาชิกโดยตรง","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"Any","returnDescription":"สมาชิกเดิมที่มีค่าน้อยที่สุด หรือ default หากข้อมูลนำเข้าว่าง หากข้อมูลว่างโดยไม่มี default หรือมีค่าที่เปรียบเทียบกันไม่ได้ จะเกิดข้อผิดพลาด","example":"# เลือกคะแนนต่ำสุด พร้อมค่าปลอดภัยเมื่อ list ว่าง\nbest = min([0.9, 0.7, 0.85])\nfallback = min([], default=\"none\")\nclosest = min([12, -5, 7], key=lambda value: abs(value))\ntext(str(closest))","aliases":[],"group":"MATH"},{"key":"function-max","kind":"FUNCTION","parentKey":null,"name":"max","signature":"max(iterable, /, *, key=None) | max(iterable, /, *, default, key=None) | max(arg1, arg2, /, *args, key=None)","description":"ส่งคืนรายการที่ใหญ่ที่สุดจากอาร์กิวเมนต์ที่ทำซ้ำได้หนึ่งรายการหรืออาร์กิวเมนต์ที่ใหญ่ที่สุดตั้งแต่สองรายการขึ้นไป คีย์สามารถคำนวณค่าที่ใช้ในการสั่งซื้อได้ ความสัมพันธ์จะเก็บสิ่งแรกที่พบ","behavior":"ส่งคืนรายการที่ใหญ่ที่สุดจากอาร์กิวเมนต์ที่ทำซ้ำได้หนึ่งรายการหรืออาร์กิวเมนต์ที่ใหญ่ที่สุดตั้งแต่สองรายการขึ้นไป คีย์สามารถคำนวณค่าที่ใช้ในการสั่งซื้อได้ ความสัมพันธ์จะเก็บสิ่งแรกที่พบ","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"ประมวลผลค่าในโฟลว์ปัจจุบัน ฟังก์ชัน key ทำงานที่นั่นด้วย การรอและการเปลี่ยนค่าของมันเกิดก่อนคืนค่า"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"String | list | tuple | dict","defaultValue":null,"description":"ค่าที่สามารถอ่านสมาชิกทีละตัวได้ เช่น รายการหรือสตริง สำหรับ dict จะเปรียบเทียบคีย์","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"},{"name":"args","type":"Any","defaultValue":null,"description":"Additional positional values when passing two or more arguments.","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"variadic"},{"name":"default","type":"Any","defaultValue":"-","description":"Value returned when the single iterable is empty. Only valid with one iterable argument.","suggestAsNamedArg":true,"requirement":"overload-dependent","callingMode":"keyword-only"},{"name":"key","type":"Callable?","defaultValue":"None","description":"ฟังก์ชันที่เรียกด้วยสมาชิกแต่ละตัว แล้วนำผลลัพธ์มาเปรียบเทียบแทนสมาชิก หากเป็น None จะเปรียบเทียบสมาชิกโดยตรง","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"Any","returnDescription":"สมาชิกเดิมที่มีค่ามากที่สุด หรือ default หากข้อมูลนำเข้าว่าง หากข้อมูลว่างโดยไม่มี default หรือมีค่าที่เปรียบเทียบกันไม่ได้ จะเกิดข้อผิดพลาด","example":"# เลือกคะแนนสูงสุด พร้อมค่าปลอดภัยเมื่อ list ว่าง\npeak = max([0.9, 0.7, 0.85])\nfallback = max([], default=\"none\")\nlongest = max([\"a\", \"team\", \"go\"], key=lambda value: len(value))\ntext(longest)","aliases":[],"group":"MATH"},{"key":"function-sorted","kind":"FUNCTION","parentKey":null,"name":"sorted","signature":"sorted(iterable, /, *, key=None, reverse=False)","description":"คืนรายการใหม่ที่เรียงจากน้อยไปมาก สมาชิกที่มีค่าเปรียบเทียบเท่ากันจะคงลำดับเดิมไว้ แม้ใช้ reverse=True","behavior":"คืนรายการใหม่ที่เรียงจากน้อยไปมาก สมาชิกที่มีค่าเปรียบเทียบเท่ากันจะคงลำดับเดิมไว้ แม้ใช้ reverse=True","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"ประมวลผลค่าในโฟลว์ปัจจุบัน ฟังก์ชัน key ทำงานที่นั่นด้วย การรอและการเปลี่ยนค่าของมันเกิดก่อนคืนค่า"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"String | list | tuple | dict | set","defaultValue":null,"description":"ค่าที่สามารถอ่านสมาชิกทีละตัวได้ เช่น รายการหรือสตริง สำหรับ dict จะเรียงลำดับคีย์","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"key","type":"Callable?","defaultValue":"None","description":"ฟังก์ชันที่เรียกด้วยสมาชิกแต่ละตัว แล้วนำผลลัพธ์มาเปรียบเทียบแทนสมาชิก หากเป็น None จะเปรียบเทียบสมาชิกโดยตรง","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"reverse","type":"Boolean","defaultValue":"False","description":"Sort descending when True.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"list","returnDescription":"รายการที่เรียงลำดับใหม่ ค่าอินพุตไม่ได้รับการแก้ไข","example":"values = sorted([3, 1, 2])\ntext(str(values))","aliases":[],"group":"COLLECTION"},{"key":"function-round","kind":"FUNCTION","parentKey":null,"name":"round","signature":"round(number, ndigits=None)","description":"ปัดเศษให้เป็นจำนวนหลักทศนิยมที่กำหนด","behavior":"ปัดเศษให้เป็นจำนวนหลักทศนิยมที่กำหนด","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"number","type":"Int | Float","defaultValue":null,"description":"Input number","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"ndigits","type":"Int?","defaultValue":"None","description":"จำนวนตำแหน่งทศนิยมที่ต้องการเก็บ ค่าลบใช้ปัดเป็นหลักสิบ หลักร้อย และต่อไป None คืนจำนวนเต็ม ค่าที่อยู่กึ่งกลางจะปัดไปยังผลลัพธ์คู่ที่ใกล้ที่สุด","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Int | Float","returnDescription":"ค่าตัวเลขที่ปัดเศษ","example":"ratio = round(0.87654, 2)\ntext(str(ratio))","aliases":[],"group":"MATH"},{"key":"function-sqrt","kind":"FUNCTION","parentKey":null,"name":"sqrt","signature":"sqrt(value, /)","description":"ส่งคืนค่ารากที่สองของค่าที่ไม่เป็นลบ","behavior":"ส่งคืนค่ารากที่สองของค่าที่ไม่เป็นลบ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Input number (>= 0)","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"ค่ารากที่สอง","example":"distance = sqrt(144)\ntext(str(distance))","aliases":[],"group":"MATH"},{"key":"function-pow","kind":"FUNCTION","parentKey":null,"name":"pow","signature":"pow(base, exponent, /)","description":"ยกฐานให้เป็นเลขชี้กำลัง","behavior":"ยกฐานให้เป็นเลขชี้กำลัง","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"base","type":"Int | Float","defaultValue":null,"description":"Base value","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"exponent","type":"Int | Float","defaultValue":null,"description":"Exponent value","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int | Float","returnDescription":"ผลลัพธ์ด้านพลังงาน","example":"boost = pow(1.2, 3)\ntext(str(boost))","aliases":[],"group":"MATH"},{"key":"function-floor","kind":"FUNCTION","parentKey":null,"name":"floor","signature":"floor(value, /)","description":"ส่งกลับจำนวนเต็มที่มากที่สุดไม่เกินค่า","behavior":"ส่งกลับจำนวนเต็มที่มากที่สุดไม่เกินค่า","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Input number","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"ค่าพื้น.","example":"bucket = floor(9.99)\ntext(str(bucket))","aliases":[],"group":"MATH"},{"key":"function-ceil","kind":"FUNCTION","parentKey":null,"name":"ceil","signature":"ceil(value, /)","description":"ส่งกลับจำนวนเต็มที่น้อยที่สุดซึ่งไม่เล็กกว่าค่า","behavior":"ส่งกลับจำนวนเต็มที่น้อยที่สุดซึ่งไม่เล็กกว่าค่า","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Input number","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"ค่าฝ้าเพดาน","example":"bucket = ceil(9.01)\ntext(str(bucket))","aliases":[],"group":"MATH"},{"key":"function-sin","kind":"FUNCTION","parentKey":null,"name":"sin","signature":"sin(value, /)","description":"ส่งคืนค่าไซน์ของค่าเป็นเรเดียน","behavior":"ส่งคืนค่าไซน์ของค่าเป็นเรเดียน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Angle in radians","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"ผลลัพธ์ไซน์","example":"wave = sin(0)\ntext(str(wave))","aliases":[],"group":"MATH"},{"key":"function-cos","kind":"FUNCTION","parentKey":null,"name":"cos","signature":"cos(value, /)","description":"ส่งคืนค่าโคไซน์ของค่าเป็นเรเดียน","behavior":"ส่งคืนค่าโคไซน์ของค่าเป็นเรเดียน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Angle in radians","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"ผลลัพธ์โคไซน์","example":"wave = cos(0)\ntext(str(wave))","aliases":[],"group":"MATH"},{"key":"function-tan","kind":"FUNCTION","parentKey":null,"name":"tan","signature":"tan(value, /)","description":"ส่งคืนค่าแทนเจนต์เป็นเรเดียน","behavior":"ส่งคืนค่าแทนเจนต์เป็นเรเดียน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Angle in radians","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"ผลลัพธ์แทนเจนต์","example":"wave = tan(0)\ntext(str(wave))","aliases":[],"group":"MATH"},{"key":"function-log","kind":"FUNCTION","parentKey":null,"name":"log","signature":"log(value, base=None, /)","description":"ส่งกลับลอการิทึมของค่า ใช้บันทึกธรรมชาติเมื่อละเว้นฐาน","behavior":"ส่งกลับลอการิทึมของค่า ใช้บันทึกธรรมชาติเมื่อละเว้นฐาน","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Input value (> 0)","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"base","type":"Int | Float","defaultValue":null,"description":"Optional base (> 0 and != 1)","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"ผลลัพธ์ลอการิทึม","example":"bits = log(8, 2)\ntext(str(bits))","aliases":[],"group":"MATH"},{"key":"function-clamp","kind":"FUNCTION","parentKey":null,"name":"clamp","signature":"clamp(value, min, max, /)","description":"จำกัด value ให้อยู่ระหว่าง min และ max: แทนค่าที่อยู่นอกช่วงด้วยขอบเขตที่ใกล้ที่สุด สามารถระบุขอบเขตในลำดับสลับกันได้","behavior":"จำกัด value ให้อยู่ระหว่าง min และ max: แทนค่าที่อยู่นอกช่วงด้วยขอบเขตที่ใกล้ที่สุด สามารถระบุขอบเขตในลำดับสลับกันได้","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คำนวณหรือแก้ค่าโดยไม่รอจับภาพ ท่าทาง หรือผู้ใช้ แยกออบเจ็กต์ที่แก้ไขได้ในแต่ละโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Input value","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"min","type":"Int | Float","defaultValue":null,"description":"Lower bound","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"max","type":"Int | Float","defaultValue":null,"description":"Upper bound","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"ค่าตัวเลขที่ถูกยึด","example":"safe = clamp(135, 0, 100)\ntext(str(safe))","aliases":[],"group":"MATH"}]}}