{"data":{"version":"v2.81","locale":"th","availableLocales":["en","vi","th","id","fil"],"updatedAt":"2026-09-30T09:58:59.584Z","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","len","int","float","str","type","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":"การเรียกทั่วไปทำในโฟลว์ปัจจุบัน และอาจรอจับภาพ ประมวลผล ท่าทาง งาน UI หรือผู้ใช้ parallel ของการสัมผัสกับ Flow.start เป็นคนละกลไก Blocking หมายถึงรอในโฟลว์ผู้เรียก ไม่ได้แปลว่า UI Android ค้าง","example":null},{"id":"flows","title":"โฟลว์เบื้องหลัง","body":"Flow.start(name, params=None) เริ่มสาขาที่แยกกันและคืนเลขลำดับ Int แต่ละ Run มีสาขาเบื้องหลังได้สูงสุดสองสาขา ไม่มี Flow.stop(), pause(), resume(), join() หรือ handle โฟลว์หลักรอสาขาเบื้องหลัง ข้อผิดพลาดในสาขาใดหรือ System.stop() หยุดทั้ง Run","example":"# ตั้งค่าโฟลว์มาโครชื่อ watch_enemy ก่อนเรียกใช้\nordinal = Flow.start(\"watch_enemy\", {\"task\": \"status\"})\nprint(ordinal)"},{"id":"shared-state","title":"สถานะร่วม","body":"ใช้ค่าและบิลเดอร์ที่เปลี่ยนแปลงได้แยกในแต่ละโฟลว์ Storage ใช้ร่วมกันโดยตั้งใจและล็อกแต่ละการทำงาน รวมการแก้ไขซ้อนที่ติดตาม Storage.get() แล้ว Storage.set() ไม่เป็นอะตอมมิก ใช้ผู้เขียนเพียงรายเดียวสำหรับอ่าน-แก้ไข-เขียน การจับภาพและแคชก็ใช้ร่วมกัน การเปลี่ยนมีผลทุกสาขา","example":null},{"id":"touches","title":"การสัมผัสในคิว","body":"parallel=True จัดคิวการสัมผัส แต่นอก collect นั้น delay_before และ delay_after ยังรอในผู้เรียก Touch.collect() รวมการสัมผัสเพื่อ Touch.send(); Touch.wait() รอจนเสร็จ ท่าทางใช้ช่องป้อนข้อมูล Android ร่วมกัน ไม่ใช่อุปกรณ์อิสระ การยกเลิกท่าทางที่กำลังทำต้องใช้ 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 Hz prompt MacroPanel แบบโต้ตอบเรียงกันและรอผู้ใช้ OverlayText เป็นของแต่ละโฟลว์ off_all() ปล่อยเฉพาะของโฟลว์นั้น งาน UI ผ่าน Android Main","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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"เลื่อนตัวอย่างอ้างอิงไปบนสแนปช็อตนี้ แล้วคืนค่าความคล้ายที่ดีที่สุด ใช้แถบแอมพลิจูด mel ที่ปรับให้เป็นมาตรฐาน 64 แถบ และหาค่าเฉลี่ยความคล้ายจากเฟรมอ้างอิงที่มีสัญญาณ ช่วงที่เสียงขาดหายจะลดคะแนน ช่วงเงียบไม่ถือว่าตรงกัน ไม่มีการรู้จำคำพูดหรือปรับแก้ความเร็วและระดับเสียง หากตัวอย่างยาวกว่าคลิปจะรายงานข้อผิดพลาด หลังอัปเดตตัวจับคู่ ควรปรับเกณฑ์ใหม่ด้วยการบันทึกคนละครั้ง","behavior":"เลื่อนตัวอย่างอ้างอิงไปบนสแนปช็อตนี้ แล้วคืนค่าความคล้ายที่ดีที่สุด ใช้แถบแอมพลิจูด mel ที่ปรับให้เป็นมาตรฐาน 64 แถบ และหาค่าเฉลี่ยความคล้ายจากเฟรมอ้างอิงที่มีสัญญาณ ช่วงที่เสียงขาดหายจะลดคะแนน ช่วงเงียบไม่ถือว่าตรงกัน ไม่มีการรู้จำคำพูดหรือปรับแก้ความเร็วและระดับเสียง หากตัวอย่างยาวกว่าคลิปจะรายงานข้อผิดพลาด หลังอัปเดตตัวจับคู่ ควรปรับเกณฑ์ใหม่ด้วยการบันทึกคนละครั้ง","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"ฟังเพื่อค้นหาเสียงอ้างอิงนี้ในเสียงใหม่เป็นเวลา timeout_ms มิลลิวินาที คืน AudioMatch แรก หรือ None หากไม่พบ เริ่มจับเสียงจากต้นทางที่ตั้งค่าไว้หากจำเป็น และจับต่อจนเรียก Audio.stop() หรือมาโครจบ พิจารณาเฉพาะเสียงที่ได้รับหลังคำสั่งนี้เริ่มสมัครรับข้อมูล สแกนช่วงเสียงที่ซ้อนทับกันอย่างต่อเนื่องทุก 10 ms โดยใช้สเปกตรัมซ้ำข้ามขอบเขตบล็อก ป้องกันช่องว่างจากการตรวจเป็นระยะ แต่ไม่รับประกันการรู้จำ สำหรับตัวอย่างเสียงที่ยาวอย่างน้อย 100 ms และมีสัญญาณเสียงเพียงพอ ผลที่ตรงกันเกือบสมบูรณ์ (คะแนนอย่างน้อย 0.9999) จะคืนทันทีเมื่อได้รับเสียงครบทั้งตัวอย่าง ผลที่ตรงกันมากอื่น ๆ (คะแนนอย่างน้อย 0.98) อาจตรวจตำแหน่งต่อได้สูงสุด 20 ms ส่วนผลที่อ่อนกว่านั้นใช้ช่วงตรวจเพิ่มสูงสุด 50 ms หากคะแนนเพิ่งตรงกันมากใกล้สิ้นสุดช่วงนั้น ระบบอาจตรวจตำแหน่งต่ออีกครั้งได้สูงสุด 20 ms ทุกผลต้องผ่านเกณฑ์ที่กำหนด Timeout จำกัดช่วงบันทึก การประมวลผลเสียงที่อยู่ในช่วงอาจเพิ่มความหน่วง ค่า 0 คืน None โดยไม่เริ่มจับเสียง Pause มาโครจะทิ้งเสียงที่รอและหยุดนับ timeout ส่วน Resume ค้นหาในช่วงเสียงใหม่ หากเซสชันหาย ข้อมูลล้น หรือเสียงเสียหาย จะรายงานข้อผิดพลาด ไม่ใช่ None","behavior":"ฟังเพื่อค้นหาเสียงอ้างอิงนี้ในเสียงใหม่เป็นเวลา timeout_ms มิลลิวินาที คืน AudioMatch แรก หรือ None หากไม่พบ เริ่มจับเสียงจากต้นทางที่ตั้งค่าไว้หากจำเป็น และจับต่อจนเรียก Audio.stop() หรือมาโครจบ พิจารณาเฉพาะเสียงที่ได้รับหลังคำสั่งนี้เริ่มสมัครรับข้อมูล สแกนช่วงเสียงที่ซ้อนทับกันอย่างต่อเนื่องทุก 10 ms โดยใช้สเปกตรัมซ้ำข้ามขอบเขตบล็อก ป้องกันช่องว่างจากการตรวจเป็นระยะ แต่ไม่รับประกันการรู้จำ สำหรับตัวอย่างเสียงที่ยาวอย่างน้อย 100 ms และมีสัญญาณเสียงเพียงพอ ผลที่ตรงกันเกือบสมบูรณ์ (คะแนนอย่างน้อย 0.9999) จะคืนทันทีเมื่อได้รับเสียงครบทั้งตัวอย่าง ผลที่ตรงกันมากอื่น ๆ (คะแนนอย่างน้อย 0.98) อาจตรวจตำแหน่งต่อได้สูงสุด 20 ms ส่วนผลที่อ่อนกว่านั้นใช้ช่วงตรวจเพิ่มสูงสุด 50 ms หากคะแนนเพิ่งตรงกันมากใกล้สิ้นสุดช่วงนั้น ระบบอาจตรวจตำแหน่งต่ออีกครั้งได้สูงสุด 20 ms ทุกผลต้องผ่านเกณฑ์ที่กำหนด Timeout จำกัดช่วงบันทึก การประมวลผลเสียงที่อยู่ในช่วงอาจเพิ่มความหน่วง ค่า 0 คืน None โดยไม่เริ่มจับเสียง Pause มาโครจะทิ้งเสียงที่รอและหยุดนับ timeout ส่วน Resume ค้นหาในช่วงเสียงใหม่ หากเซสชันหาย ข้อมูลล้น หรือเสียงเสียหาย จะรายงานข้อผิดพลาด ไม่ใช่ None","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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 มิลลิวินาที ไม่นับช่วงที่มาโครหยุดชั่วคราว ขอบเขตช่วงเวลาประมาณจากเวลาที่เครื่องบันทึกอ่านข้อมูลเสร็จ ไม่ใช่ timestamp ของฮาร์ดแวร์","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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"จุดบนหน้าจอ วัดเป็นพิกเซล การแมปพิกัดการควบคุมมาตราส่วน/จุดยึดข้ามขนาดหน้าจอ หลังจากการแมปและออฟเซ็ต ผู้ใช้รันไทม์จะยึดจุดสุดท้ายไว้ที่ช่วงพิกเซลที่ถูกต้องของหน้าจอปัจจุบัน จุดสามารถทำลายโครงสร้างได้เป็น x, y","behavior":"จุดบนหน้าจอ วัดเป็นพิกเซล การแมปพิกัดการควบคุมมาตราส่วน/จุดยึดข้ามขนาดหน้าจอ หลังจากการแมปและออฟเซ็ต ผู้ใช้รันไทม์จะยึดจุดสุดท้ายไว้ที่ช่วงพิกเซลที่ถูกต้องของหน้าจอปัจจุบัน จุดสามารถทำลายโครงสร้างได้เป็น x, y","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":"Coordinate scale mode. Values: fixed, auto, width, height.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"anchor","type":"String","defaultValue":"none","description":"Coordinate anchor. Values: 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":"Coordinate scale mode.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"anchor","type":"String","defaultValue":"none","description":"Coordinate anchor.","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-offset","kind":"METHOD","parentKey":"class-point","name":"offset","signature":"point.offset(dx, dy, scale=None)","description":"แก้ไขจุดนี้บนหน้าจอปัจจุบัน คูณจำนวนเต็มพิกเซล dx/dy ด้วยอัตราส่วนความกว้างหรือความสูงเต็มหน้าจอที่เลือกโดยไม่ต้องหมุนแกนเดลต้า จากนั้นเพิ่มผลลัพธ์และส่งกลับจุดพิกเซลคงที่ใหม่โดยไม่มีจุดยึด ไม่ได้ใช้ขนาดวิวพอร์ตของแอป เมื่อละเว้นมาตราส่วน ออฟเซ็ตจะสืบทอดมาตราส่วนของจุดนี้ จุดเดิมไม่กลายพันธุ์","behavior":"แก้ไขจุดนี้บนหน้าจอปัจจุบัน คูณจำนวนเต็มพิกเซล dx/dy ด้วยอัตราส่วนความกว้างหรือความสูงเต็มหน้าจอที่เลือกโดยไม่ต้องหมุนแกนเดลต้า จากนั้นเพิ่มผลลัพธ์และส่งกลับจุดพิกเซลคงที่ใหม่โดยไม่มีจุดยึด ไม่ได้ใช้ขนาดวิวพอร์ตของแอป เมื่อละเว้นมาตราส่วน ออฟเซ็ตจะสืบทอดมาตราส่วนของจุดนี้ จุดเดิมไม่กลายพันธุ์","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":"Integer pixel delta on the Point X axis. Decimal and normalized values are rejected.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"dy","type":"Int","defaultValue":null,"description":"Integer pixel delta on the Point Y axis. Decimal and normalized values are rejected.","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":"จุดพิกเซลคงที่ที่แก้ไขแล้วซึ่งยึดกับหน้าจอปัจจุบัน ซึ่งมีขนาด FIXED_PIXEL และจุดยึดคือ 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":"วาดสี่เหลี่ยมจัตุรัสที่ไฮไลต์ไว้ตรงกลางจุดนี้ การไฮไลต์อินสแตนซ์จุดเดิมอีกครั้งจะแทนที่อินสแตนซ์ก่อนหน้า","behavior":"วาดสี่เหลี่ยมจัตุรัสที่ไฮไลต์ไว้ตรงกลางจุดนี้ การไฮไลต์อินสแตนซ์จุดเดิมอีกครั้งจะแทนที่อินสแตนซ์ก่อนหน้า","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":"Stroke thickness in dp.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"region_width","type":"Number","defaultValue":"36","description":"Square width/height in pixels.","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":"ปิดไฮไลต์สำหรับอินสแตนซ์จุดนี้","behavior":"ปิดไฮไลต์สำหรับอินสแตนซ์จุดนี้","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":"จุดหนึ่งในเส้นทางการปัดแบบเรียบ จุดจะต้องเป็นจุดหรือทูเพิล (x, y) Pass a list of at least two SwipePoint values to swipe([...]) to move one finger through multiple points.","behavior":"จุดหนึ่งในเส้นทางการปัดแบบเรียบ จุดจะต้องเป็นจุดหรือทูเพิล (x, y) Pass a list of at least two SwipePoint values to swipe([...]) to move one finger through multiple points.","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":"Coordinate point in pixels. Point carries scale/anchor metadata.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"speed","type":"String","defaultValue":"NORMAL","description":"Speed preset from this point to the next point. Values: VERY_SLOW, SLOW, NORMAL, FAST, VERY_FAST.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"delay_before","type":"Number","defaultValue":"0","description":"Delay before this point/segment in milliseconds.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"random","type":"Number","defaultValue":"10","description":"Random pixel offset radius for this point.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"humanized","type":"Boolean","defaultValue":"False","description":"Use a curved human-like path where supported.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"scale","type":"String","defaultValue":"fixed","description":"Coordinate scale mode.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"anchor","type":"String","defaultValue":"none","description":"Coordinate anchor.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"point","type":"Point | tuple[Number, Number]","defaultValue":null,"description":"Coordinate as Point or tuple (x, y). Point scale/anchor metadata is copied unless scale/anchor are provided on SwipePoint.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"speed","type":"String","defaultValue":"NORMAL","description":"Speed preset from this point to the next point. Values: VERY_SLOW, SLOW, NORMAL, FAST, VERY_FAST.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"delay_before","type":"Number","defaultValue":"0","description":"Delay before this point/segment in milliseconds.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"random","type":"Number","defaultValue":"10","description":"Random pixel offset radius for this point.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"humanized","type":"Boolean","defaultValue":"False","description":"Use a curved human-like path where supported.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"scale","type":"String","defaultValue":"fixed","description":"Coordinate scale mode.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"anchor","type":"String","defaultValue":"none","description":"Coordinate anchor.","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":"ตัวช่วยแบบคงที่สำหรับการคลิก/การปัดแบบขนานที่สร้างโดย UI หรือโค้ดผ่านการคลิก(..., Parallel=True) และ การปัด(..., Parallel=True) คุณสามารถรวบรวมการดำเนินการคลิก/ปัดแล้วส่งพร้อมกัน หรือตรวจสอบการดำเนินการคลิก/ปัดที่ทำงานอยู่หรืออยู่ในคิว ตัวช่วยยังรองรับการยกเลิกการดำเนินการคลิก/ปัดนิ้วที่ใช้งานอยู่ (เฉพาะ Android 8.0 ขึ้นไป)","behavior":"ตัวช่วยแบบคงที่สำหรับการคลิก/การปัดแบบขนานที่สร้างโดย UI หรือโค้ดผ่านการคลิก(..., Parallel=True) และ การปัด(..., Parallel=True) คุณสามารถรวบรวมการดำเนินการคลิก/ปัดแล้วส่งพร้อมกัน หรือตรวจสอบการดำเนินการคลิก/ปัดที่ทำงานอยู่หรืออยู่ในคิว ตัวช่วยยังรองรับการยกเลิกการดำเนินการคลิก/ปัดนิ้วที่ใช้งานอยู่ (เฉพาะ Android 8.0 ขึ้นไป)","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"ท่าทาง Android ใช้อุปกรณ์ร่วมกัน parallel=True จัดคิว id การสัมผัส แต่ delay_before และ delay_after ยังทำให้รอนอกโหมด collect ในโหมด collect จะรวบรวมการสัมผัสเพื่อ Touch.send(); Touch.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":"Enable collect mode for click/swipe calls with parallel=True. When enabled, parallel click/swipe calls are not sent immediately; they are collected and only sent after Touch.send(). This method works for both UI/code. If Touch.collect() is not enabled, parallel click/swipe calls are sent immediately, and later click/swipe calls must wait for the previous click/swipe to finish before they can run because running a later click/swipe immediately would cancel the previous one. You can intentionally cancel the previous click/swipe with Touch.cancel().","behavior":"Enable collect mode for click/swipe calls with parallel=True. When enabled, parallel click/swipe calls are not sent immediately; they are collected and only sent after Touch.send(). This method works for both UI/code. If Touch.collect() is not enabled, parallel click/swipe calls are sent immediately, and later click/swipe calls must wait for the previous click/swipe to finish before they can run because running a later click/swipe immediately would cancel the previous one. You can intentionally cancel the previous click/swipe with Touch.cancel().","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"collect/send และการอ่านสถานะไม่รอท่าทางเสร็จ คำสั่งที่รวมถึง executor เมื่อ 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":"Send all click/swipe calls collected by Touch.collect() at once, return their matching numeric ids, then turn off Touch.collect() collection mode.","behavior":"Send all click/swipe calls collected by Touch.collect() at once, return their matching numeric ids, then turn off Touch.collect() collection mode.","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"collect/send และการอ่านสถานะไม่รอท่าทางเสร็จ คำสั่งที่รวมถึง executor เมื่อ 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":"Return touch states currently in the queue.","behavior":"Return touch states currently in the queue.","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"collect/send และการอ่านสถานะไม่รอท่าทางเสร็จ คำสั่งที่รวมถึง executor เมื่อ 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":"Return active touch states.","behavior":"Return active touch states.","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"collect/send และการอ่านสถานะไม่รอท่าทางเสร็จ คำสั่งที่รวมถึง executor เมื่อ 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":"Return recent and queued/active touch states.","behavior":"Return recent and queued/active touch states.","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"collect/send และการอ่านสถานะไม่รอท่าทางเสร็จ คำสั่งที่รวมถึง executor เมื่อ 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":"Wait for one numeric id, or every queued/active touch when id is None.","behavior":"Wait for one numeric id, or every queued/active touch when id is None.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"รอในโฟลว์ผู้เรียกจนถึงเวลาที่กำหนดหรือการสัมผัสเสร็จ โฟลว์อื่นทำต่อได้ pause และ stop ยังมีผล"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"TouchState | 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()\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":"Cancel one queued or active touch by numeric id. When id is None, cancels every queued/active touch and returns the accepted cancel count. Active cancel requires Android 8.0+; Android 7.x scripts fail with a clear error when an active touch is targeted.","behavior":"Cancel one queued or active touch by numeric id. When id is None, cancels every queued/active touch and returns the accepted cancel count. Active cancel requires Android 8.0+; Android 7.x scripts fail with a clear error when an active touch is targeted.","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"ท่าทาง Android ใช้อุปกรณ์ร่วมกัน parallel=True จัดคิว id การสัมผัส แต่ delay_before และ delay_after ยังทำให้รอนอกโหมด collect ในโหมด collect จะรวบรวมการสัมผัสเพื่อ Touch.send(); Touch.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":"สแนปชอตของรายการสัมผัสสคริปต์/UI หนึ่งรายการในคิวท่าทางสัมผัสที่ใช้ร่วมกัน","behavior":"สแนปชอตของรายการสัมผัสสคริปต์/UI หนึ่งรายการในคิวท่าทางสัมผัสที่ใช้ร่วมกัน","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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, or 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":"Owning action order.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"remaining_repeats","type":"Number","defaultValue":"0","description":"Repeats still queued.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"completed_repeats","type":"Number","defaultValue":"0","description":"Repeats already completed.","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 โดย fast_matching จะลดขนาดทั้งภาพ Region และเทมเพลต","behavior":"พารามิเตอร์การจับคู่เทมเพลตสำหรับ Region โดย fast_matching จะลดขนาดทั้งภาพ 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":"ลองขนาดเทมเพลตรอบสเกลที่กำหนดด้วยช่วงแบบปรับตามอุปกรณ์: DPI/ความละเอียดสูงจะตรวจตัวเลือกที่เล็กลงถึง 0.70x ส่วน DPI/ความละเอียดต่ำจะตรวจตัวเลือกที่ใหญ่ขึ้นถึง 1.30x","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, 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":"ลองขนาดเทมเพลตในช่วงขอบแบบปรับได้ 0.70x-1.30x หลังจากใช้สเกลเทมเพลตที่กำหนด","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"cache_scale","type":"Boolean","defaultValue":"True","description":"บันทึกค่า auto-scale ที่จับคู่สำเร็จ","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, 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":"A rectangular region on the screen, measured in pixels on the current screen axes. Scale/anchor control coordinate mapping across full-screen sizes without rotating through portrait coordinates or using the app viewport; runtime consumers clip the final region to the current screen after mapping and offsets. ScaleParam controls template matching inside this region. Region can be destructured as x, y, width, height.","behavior":"A rectangular region on the screen, measured in pixels on the current screen axes. Scale/anchor control coordinate mapping across full-screen sizes without rotating through portrait coordinates or using the app viewport; runtime consumers clip the final region to the current screen after mapping and offsets. ScaleParam controls template matching inside this region. Region can be destructured as x, y, width, height.","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":"**Applies to region coordinates**. Coordinate scale mode using full-screen dimensions on the current X/Y axes, without app viewport scaling or portrait rotation. Values: \"fixed\" keeps saved pixels unchanged; \"auto\" scales X by width and Y by height; \"width\" scales both axes by screen width; \"height\" scales both axes by screen height.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"anchor","type":"String","defaultValue":"none","description":"**Applies to region coordinates**. Coordinate anchor. Values: 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":"**Applies to region coordinates**. Optional full-screen scale mode on the current X/Y axes. Values: \"fixed\", \"auto\", \"width\", \"height\".","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"anchor","type":"String","defaultValue":"none","description":"**Applies to region coordinates**. Optional anchor mode. Values: 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-highlighted","kind":"STATIC_METHOD","parentKey":"class-region","name":"highlighted","signature":"Region.highlighted()","description":"รับทุกภูมิภาคที่เน้นโดยอินสแตนซ์สคริปต์","behavior":"รับทุกภูมิภาคที่เน้นโดยอินสแตนซ์สคริปต์","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Region","returnDescription":"ขอบเขตขนาดหน้าจอจากโฮสต์รันไทม์","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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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-find","kind":"METHOD","parentKey":"class-region","name":"find","signature":"region.find(template, timeout=0, threshold=0.7, rate=3.0)","description":"สแกนภายในบริเวณนี้จนกว่าจะพบเทมเพลตที่ตรงกันหรือหมดเวลา หากไม่ระบุ timeout จะสแกนเพียงครั้งเดียว ใช้ ScreenCapture.cache_on() เพื่อตรวจหลายภาพในเฟรมที่ปักหมุดเดียวกัน แล้วใช้ cache_off() เพื่อเลิกปักหมุด หากต้องตรวจจับต่อเนื่องด้วยเฟรมล่าสุดที่มี ให้เรียก ScreenCapture.auto_cache_off() เพิ่มด้วย มิฉะนั้นแคชอัตโนมัติจะใช้เฟรมซ้ำได้นานถึง 100 ms การปิดแคชเพิ่มงานจับภาพและไม่รับประกันว่าจะทำงานเร็วขึ้น","behavior":"สแกนภายในบริเวณนี้จนกว่าจะพบเทมเพลตที่ตรงกันหรือหมดเวลา หากไม่ระบุ timeout จะสแกนเพียงครั้งเดียว ใช้ ScreenCapture.cache_on() เพื่อตรวจหลายภาพในเฟรมที่ปักหมุดเดียวกัน แล้วใช้ cache_off() เพื่อเลิกปักหมุด หากต้องตรวจจับต่อเนื่องด้วยเฟรมล่าสุดที่มี ให้เรียก ScreenCapture.auto_cache_off() เพิ่มด้วย มิฉะนั้นแคชอัตโนมัติจะใช้เฟรมซ้ำได้นานถึง 100 ms การปิดแคชเพิ่มงานจับภาพและไม่รับประกันว่าจะทำงานเร็วขึ้น","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"การตรวจจับทำในโฟลว์ผู้เรียกและใช้การจับภาพร่วมกัน find ค้นหาการปรากฏ ส่วน wait รอให้หายไป แม้สแกนครั้งเดียวก็ใช้เวลาจับภาพและประมวลผล timeout หรืออัตราตรวจสอบไม่ได้ทำให้เรียกแบบอะซิงโครนัส"},"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 name, relative folder path, or a Template object in current macro.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. Omit this argument to scan only once.","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":"Scan attempts per second (1-60).","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"แมตช์แรกที่สำเร็จ หรือ found=false เมื่อหมดเวลา","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 หรืออัตราตรวจสอบไม่ได้ทำให้เรียกแบบอะซิงโครนัส"},"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 name, relative folder path, or a Template object in current macro.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. Omit this argument to scan only once.","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":"Scan attempts per second (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 หรืออัตราตรวจสอบไม่ได้ทำให้เรียกแบบอะซิงโครนัส"},"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 names or Template objects.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. Omit this argument to scan only once.","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":"Scan attempts per second (1-60).","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"ผลการจับคู่เป็นกลุ่มเมื่อพบเทมเพลตใดๆ หรือรายการว่างเมื่อหมดเวลา","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 หรืออัตราตรวจสอบไม่ได้ทำให้เรียกแบบอะซิงโครนัส"},"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 names or Template objects.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. Omit this argument to scan only once.","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":"Scan attempts per second (1-60).","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"ผลการจับคู่เป็นกลุ่มเมื่อพบเทมเพลตทั้งหมด หรือรายการว่างเมื่อหมดเวลา","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":"สแกนขอบเขตนี้เพื่อหาสีเป้าหมายหนึ่งสีโดยใช้กฎการยอมรับ RGB แบบ Raw-frame เดียวกันกับการจดจำสี UI จุดที่ดีที่สุดจะถูกเลือกโดยเดลต้าช่อง RGB สูงสุดที่เล็กที่สุด","behavior":"สแกนขอบเขตนี้เพื่อหาสีเป้าหมายหนึ่งสีโดยใช้กฎการยอมรับ RGB แบบ Raw-frame เดียวกันกับการจดจำสี UI จุดที่ดีที่สุดจะถูกเลือกโดยเดลต้าช่อง RGB สูงสุดที่เล็กที่สุด","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"การตรวจจับทำในโฟลว์ผู้เรียกและใช้การจับภาพร่วมกัน find ค้นหาการปรากฏ ส่วน wait รอให้หายไป แม้สแกนครั้งเดียวก็ใช้เวลาจับภาพและประมวลผล timeout หรืออัตราตรวจสอบไม่ได้ทำให้เรียกแบบอะซิงโครนัส"},"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":"Maximum wait time in milliseconds. 0 performs one scan pass.","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":"Scan attempts per second while waiting.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"interval","type":"Number","defaultValue":"10","description":"Sampling step in pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"จับคู่กับ point เป็น list[Point]; find_color ส่งคืนค่าสูงสุดหนึ่งจุด","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":"สแกนภูมิภาคนี้เพื่อดูสีเป้าหมายหลายสี สีอินพุตแต่ละสีมีส่วนช่วยในจุดที่ดีที่สุดเพียงจุดเดียว โดยเรียงลำดับตามรายการสีอินพุต","behavior":"สแกนภูมิภาคนี้เพื่อดูสีเป้าหมายหลายสี สีอินพุตแต่ละสีมีส่วนช่วยในจุดที่ดีที่สุดเพียงจุดเดียว โดยเรียงลำดับตามรายการสีอินพุต","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"การตรวจจับทำในโฟลว์ผู้เรียกและใช้การจับภาพร่วมกัน find ค้นหาการปรากฏ ส่วน wait รอให้หายไป แม้สแกนครั้งเดียวก็ใช้เวลาจับภาพและประมวลผล timeout หรืออัตราตรวจสอบไม่ได้ทำให้เรียกแบบอะซิงโครนัส"},"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":"Maximum wait time in milliseconds. 0 performs one scan pass.","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":"Scan attempts per second while waiting.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"interval","type":"Number","defaultValue":"10","description":"Sampling step in pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"จับคู่กับ point เป็น list[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":"สแกนบริเวณนี้เพื่อหาตำแหน่งสุ่มตัวอย่างหลายตำแหน่งด้วยสีเป้าหมายเดียว การส่งผ่านรายการหรือทูเพิลถูกปฏิเสธ ดังนั้นจึงไม่กลายเป็นการค้นหาสีหลายเป้าหมายโดยเงียบๆ","behavior":"สแกนบริเวณนี้เพื่อหาตำแหน่งสุ่มตัวอย่างหลายตำแหน่งด้วยสีเป้าหมายเดียว การส่งผ่านรายการหรือทูเพิลถูกปฏิเสธ ดังนั้นจึงไม่กลายเป็นการค้นหาสีหลายเป้าหมายโดยเงียบๆ","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"การตรวจจับทำในโฟลว์ผู้เรียกและใช้การจับภาพร่วมกัน find ค้นหาการปรากฏ ส่วน wait รอให้หายไป แม้สแกนครั้งเดียวก็ใช้เวลาจับภาพและประมวลผล timeout หรืออัตราตรวจสอบไม่ได้ทำให้เรียกแบบอะซิงโครนัส"},"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":"Maximum wait time in milliseconds. 0 performs one scan pass.","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":"Scan attempts per second while waiting.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"interval","type":"Number","defaultValue":"10","description":"Sampling step in pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"จับคู่กับ point เป็น list[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 หรืออัตราตรวจสอบไม่ได้ทำให้เรียกแบบอะซิงโครนัส"},"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 name, relative folder path, or a Template object in current macro.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. Omit this argument to scan only once.","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":"Scan attempts per second (1-60).","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"สถานะการจับคู่ล่าสุดเมื่อเทมเพลตหายไปหรือถึงระยะหมดเวลา","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 หรืออัตราตรวจสอบไม่ได้ทำให้เรียกแบบอะซิงโครนัส"},"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 names or Template objects.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. Omit this argument to scan only once.","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":"Scan attempts per second (1-60).","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"การจับคู่แบบกลุ่มจะระบุเมื่อไม่พบเทมเพลตอย่างน้อยหนึ่งรายการอีกต่อไป","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 หรืออัตราตรวจสอบไม่ได้ทำให้เรียกแบบอะซิงโครนัส"},"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 names or Template objects.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. Omit this argument to scan only once.","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":"Scan attempts per second (1-60).","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"การจับคู่แบบกลุ่มจะระบุเมื่อไม่พบเทมเพลตทั้งหมดอีกต่อไป","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":"จับภาพหน้าจอและครอบตัดบริเวณนี้ จากนั้นส่งคืนผลลัพธ์เป็นเทมเพลต","behavior":"จับภาพหน้าจอและครอบตัดบริเวณนี้ จากนั้นส่งคืนผลลัพธ์เป็นเทมเพลต","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"การตรวจจับทำในโฟลว์ผู้เรียกและใช้การจับภาพร่วมกัน find ค้นหาการปรากฏ ส่วน wait รอให้หายไป แม้สแกนครั้งเดียวก็ใช้เวลาจับภาพและประมวลผล timeout หรืออัตราตรวจสอบไม่ได้ทำให้เรียกแบบอะซิงโครนัส"},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String?","defaultValue":"None","description":"Optional template name to save into current macro immediately.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Template","returnDescription":"วัตถุเทมเพลตที่บันทึกไว้","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":"Shrink amount: 0 -> 1 means ratio of current width, >1 means pixels.","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":"Shrink amount: 0 -> 1 means ratio of current width, >1 means pixels.","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":"Shrink amount: 0 -> 1 means ratio of current height, >1 means pixels.","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":"Shrink amount: 0 -> 1 means ratio of current height, >1 means pixels.","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":"Total horizontal shrink: 0 -> 1 means ratio of current width, >1 means pixels.","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":"Total vertical shrink: 0 -> 1 means ratio of current height, >1 means pixels.","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":"Shrink amount for both axes: 0 -> 1 means ratio per axis, >1 means pixels per axis.","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":"วาดรูปสี่เหลี่ยมผืนผ้าที่ไฮไลต์สำหรับบริเวณนี้ ด้วย movable=True ผู้ใช้สามารถลากขอบเขตและวัตถุภูมิภาคเดียวกันจะได้รับพิกัดหน้าจอที่อัปเดต การไฮไลต์อินสแตนซ์ภูมิภาคเดียวกันอีกครั้งจะแทนที่อินสแตนซ์ก่อนหน้า","behavior":"วาดรูปสี่เหลี่ยมผืนผ้าที่ไฮไลต์สำหรับบริเวณนี้ ด้วย movable=True ผู้ใช้สามารถลากขอบเขตและวัตถุภูมิภาคเดียวกันจะได้รับพิกัดหน้าจอที่อัปเดต การไฮไลต์อินสแตนซ์ภูมิภาคเดียวกันอีกครั้งจะแทนที่อินสแตนซ์ก่อนหน้า","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","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":"Stroke thickness in dp.","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":"ปิดไฮไลต์สำหรับอินสแตนซ์ภูมิภาคนี้","behavior":"ปิดไฮไลต์สำหรับอินสแตนซ์ภูมิภาคนี้","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"Wrapper รูปภาพเทมเพลต คุณสามารถปรับขนาด/ครอบตัดเทมเพลตที่มีอยู่ บันทึกเป็นชื่อเทมเพลตใหม่ หรือตรวจสอบการมีอยู่ได้","behavior":"Wrapper รูปภาพเทมเพลต คุณสามารถปรับขนาด/ครอบตัดเทมเพลตที่มีอยู่ บันทึกเป็นชื่อเทมเพลตใหม่ หรือตรวจสอบการมีอยู่ได้","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["name"],"fieldDocs":[{"name":"name","type":"String?","defaultValue":null,"description":"Template name or relative folder path when this object points to a named template in current macro.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"name","type":"String","defaultValue":null,"description":"Template name in current macro, optionally as a relative folder path such as \"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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-exists","kind":"METHOD","parentKey":"class-template","name":"exists","signature":"template.exists()","description":"ตรวจสอบว่าวัตถุเทมเพลตนี้ยังชี้ไปที่ไฟล์ที่มีอยู่หรือไม่","behavior":"ตรวจสอบว่าวัตถุเทมเพลตนี้ยังชี้ไปที่ไฟล์ที่มีอยู่หรือไม่","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"สร้างสำเนาเทมเพลตที่ปรับขนาดแล้วส่งคืนเป็นออบเจ็กต์เทมเพลตอื่น","behavior":"สร้างสำเนาเทมเพลตที่ปรับขนาดแล้วส่งคืนเป็นออบเจ็กต์เทมเพลตอื่น","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"scale","type":"Number","defaultValue":null,"description":"Scale factor for X axis (and Y axis when scale_y is omitted).","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"scale_y","type":"Number","defaultValue":"scale","description":"Optional Y-axis scale factor.","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":"ครอบตัดเทมเพลตนี้ตามขอบเขตในพิกเซลของเทมเพลตและส่งคืนออบเจ็กต์เทมเพลตใหม่","behavior":"ครอบตัดเทมเพลตนี้ตามขอบเขตในพิกเซลของเทมเพลตและส่งคืนออบเจ็กต์เทมเพลตใหม่","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"region","type":"Region","defaultValue":null,"description":"Crop region in template-local coordinates.","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":"บันทึกวัตถุเทมเพลตนี้ลงในเทมเพลตแมโครปัจจุบันโดยใช้ชื่อใหม่หรือเส้นทางโฟลเดอร์ที่เกี่ยวข้อง","behavior":"บันทึกวัตถุเทมเพลตนี้ลงในเทมเพลตแมโครปัจจุบันโดยใช้ชื่อใหม่หรือเส้นทางโฟลเดอร์ที่เกี่ยวข้อง","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"New template name, optionally including folders such as \"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"ผลการจับคู่การจดจำแบบอ่านอย่างเดียวที่ส่งคืนโดยผู้ช่วยเหลือ Region.find* ในสาขาความสำเร็จของการจดจำ Recognition.result ชี้ไปที่ Match หรือ MatchList ที่ใช้งานอยู่","behavior":"ผลการจับคู่การจดจำแบบอ่านอย่างเดียวที่ส่งคืนโดยผู้ช่วยเหลือ Region.find* ในสาขาความสำเร็จของการจดจำ Recognition.result ชี้ไปที่ Match หรือ MatchList ที่ใช้งานอยู่","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"จุดของผลการจับคู่ โดยปกติการจดจำภาพ/OCR/วัตถุจะคืนค่า Point; การจับคู่ภาพที่ต่ำกว่า threshold ยังสามารถคืนจุดผู้สมัครที่ดีที่สุดได้เมื่อมี bounds การจดจำสีและหลายเป้าหมายอาจคืนค่า list[Point] เพื่อให้ match.point[0].x/y อ่านจุดที่ดีที่สุดได้","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"bounds","type":"Region?","defaultValue":null,"description":"กรอบ bounds ของพื้นที่ที่จับคู่ การจับคู่ภาพที่ต่ำกว่า threshold ยังสามารถแสดง bounds ของผู้สมัครที่ดีที่สุดได้","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":"ข้อมูลเมตาของโมเดลหรือสีเมื่อมี สำหรับ TFLite จะมี backend, class_id, class_name, preprocess_ms, inference_ms, postprocess_ms, total_ms, input_width, input_height, ขนาดภาพดีบักแบบไม่บังคับ และข้อมูลการจับภาพ ส่วนแถว debug_result แบบละเอียดจะแสดงเฉพาะในหน้าต่างดีบัก inference เท่านั้น ข้อมูลสีจะมี backend=color, target_color, sampled_color, point, max_channel_delta, confidence, interval, match_count และ matches","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":"m = 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\ninfo_class_id = info.class_id\ninfo_class_name = info.class_name\n\ncolor_hit = Region(0, 0, 1080, 1920).find_color(\"#FFFFFF\", tolerance=4)\ncolor_name = color_hit.name\nfirst_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":"วาดกรอบไฮไลต์สำหรับแมตช์นี้เมื่อ found=true ใช้ขอบเขตก่อน เมื่อขอบเขตหายไป ให้วาดหนึ่งช่องสี่เหลี่ยมสำหรับแต่ละจุดในจุด/รายการ","behavior":"วาดกรอบไฮไลต์สำหรับแมตช์นี้เมื่อ found=true ใช้ขอบเขตก่อน เมื่อขอบเขตหายไป ให้วาดหนึ่งช่องสี่เหลี่ยมสำหรับแต่ละจุดในจุด/รายการ","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","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":"Outline width in pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"region_width","type":"Number","defaultValue":"36","description":"Fallback square width when the match only has point.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"auto_hide_ms","type":"Number","defaultValue":"0","description":"Auto-hide timeout in milliseconds. 0 keeps highlight visible.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"ส่งคืนการจับคู่เดียวกันหลังจากไฮไลต์การวาด","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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"รายการค่าการจับคู่แบบอ่านอย่างเดียวที่ส่งคืนโดย Region.find_any/find_all/find_multi, wait_any/wait_all และ Recognition.result เมื่อเป้าหมายการจดจำหลายรายการตรงกัน","behavior":"รายการค่าการจับคู่แบบอ่านอย่างเดียวที่ส่งคืนโดย Region.find_any/find_all/find_multi, wait_any/wait_all และ Recognition.result เมื่อเป้าหมายการจดจำหลายรายการตรงกัน","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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-highlight","kind":"METHOD","parentKey":"class-matchlist","name":"highlight","signature":"matches.highlight(color=\"green\", line_width=2, region_width=36, auto_hide_ms=0)","description":"วาดกรอบไฮไลต์สำหรับการแข่งขันแต่ละรายการที่พบในรายการนี้ รายการที่ไม่มีจุด/ขอบเขตการจับคู่ที่ถูกต้องจะถูกข้ามไป","behavior":"วาดกรอบไฮไลต์สำหรับการแข่งขันแต่ละรายการที่พบในรายการนี้ รายการที่ไม่มีจุด/ขอบเขตการจับคู่ที่ถูกต้องจะถูกข้ามไป","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","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":"Outline width in pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"region_width","type":"Number","defaultValue":"36","description":"Fallback square width when a match has point only.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"auto_hide_ms","type":"Number","defaultValue":"0","description":"Auto-hide timeout in milliseconds. 0 keeps highlight visible.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"ส่งคืนรายการการแข่งขันเดียวกันหลังจากวาดไฮไลท์","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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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 หนึ่งสี และจัดเตรียมตัวช่วยในการสุ่มตัวอย่าง/เปรียบเทียบสี","behavior":"แสดงถึงสี ARGB หนึ่งสี และจัดเตรียมตัวช่วยในการสุ่มตัวอย่าง/เปรียบเทียบสี","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":"Alpha channel 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":"อ่านสีจากหน้าจอ: จุด -> สี ภูมิภาค -> อาร์เรย์สี 2D รายการ [จุด] -> รายการสี นี่เป็นตัวอย่างครั้งเดียวทันที หากไม่มีเฟรมหรือตัวอย่างหายไป ให้ส่งคืนสีเริ่มต้นแทนการลองใหม่หรือหยุดสคริปต์","behavior":"อ่านสีจากหน้าจอ: จุด -> สี ภูมิภาค -> อาร์เรย์สี 2D รายการ [จุด] -> รายการสี นี่เป็นตัวอย่างครั้งเดียวทันที หากไม่มีเฟรมหรือตัวอย่างหายไป ให้ส่งคืนสีเริ่มต้นแทนการลองใหม่หรือหยุดสคริปต์","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":"Grid step (pixels) when target is Region.","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":"เพย์โหลดสีตัวอย่างตามประเภทเป้าหมาย โดยเติมตัวอย่างที่ขาดหายไปตามค่าเริ่มต้น","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":"Allowed per-channel difference (0-255). Practical start: 4-8 for near-identical UI shades, 10-16 for anti-alias/compression variation.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"เป็นจริงเมื่อช่อง RGB ทั้งหมดอยู่ในเกณฑ์ที่ยอมรับได้ คำแนะนำฉบับย่อ: 0 = ตรงทั้งหมด 4-8 = เกือบเท่ากัน 10-16 = การจับคู่ที่ยอมรับได้ >24 = หลวมมาก","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":"ระยะทาง RGB-space ในช่วง 0 -> 441.67 (0 = แน่นอน) แนวทางปฏิบัติ: <=8 เกือบจะเหมือนกัน, 9-20 ปิด, 21-40 แตกต่างกันอย่างเห็นได้ชัด, >40 ห่างกัน","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":"คะแนนความแตกต่างการรับรู้ Rule of thumb: <1 imperceptible, 1-2 barely noticeable, 2-5 noticeable, 5-10 clearly different, >10 different colors.","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-compare","kind":"METHOD","parentKey":"class-color","name":"compare","signature":"color.compare(other, tolerance=0)","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"},{"name":"tolerance","type":"Number","defaultValue":"0","description":"Allowed per-channel difference (0-255). Typical same-ish range: 4-8; use 10-16 for noisy/compressed captures.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"ผลการเปรียบเทียบ 0 หมายถึงการจับคู่แบบตรงทั้งหมด ความอดทนที่มากขึ้นทำให้การจับคู่อนุญาตมากขึ้น","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":"ระยะห่างของพื้นที่ RGB (0 -> 441.67) อ่านอย่างรวดเร็ว: <=8 เกือบจะเหมือนกัน, 9-20 ปิด, 21-40 แตกต่างกันอย่างเห็นได้ชัด, >40 ห่างกัน","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":"คะแนนความแตกต่างของสีที่รับรู้ Practical guide: <1 imperceptible, 1-2 barely visible, 2-5 noticeable, 5-10 clear difference, >10 very different.","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":"วาดข้อความที่ด้านบนของหน้าจอด้วยการติดตามการโต้ตอบที่เป็นตัวเลือก (กด/ย้าย/กดค้างไว้) ชื่อตัวตั้งค่าเช่นข้อความ/พื้นหลังเป็นวิธีการ อ่านค่าปัจจุบันผ่าน state()","behavior":"วาดข้อความที่ด้านบนของหน้าจอด้วยการติดตามการโต้ตอบที่เป็นตัวเลือก (กด/ย้าย/กดค้างไว้) ชื่อตัวตั้งค่าเช่นข้อความ/พื้นหลังเป็นวิธีการ อ่านค่าปัจจุบันผ่าน state()","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"แต่ละโฟลว์เป็นเจ้าของ id โอเวอร์เลย์ของตน off_all() ปล่อยเฉพาะโอเวอร์เลย์ของโฟลว์นั้น งาน UI ส่งไปที่ Android Main และอาจพักผู้เรียก เก็บบิลเดอร์โอเวอร์เลย์ที่เปลี่ยนค่าได้ในโฟลว์เจ้าของ"},"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":"Initial text content.","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(\"Ready\", Point(420, 220, scale=\"width\", anchor=\"top\"), background=None)","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":"แต่ละโฟลว์เป็นเจ้าของ id โอเวอร์เลย์ของตน off_all() ปล่อยเฉพาะโอเวอร์เลย์ของโฟลว์นั้น งาน UI ส่งไปที่ Android Main และอาจพักผู้เรียก เก็บบิลเดอร์โอเวอร์เลย์ที่เปลี่ยนค่าได้ในโฟลว์เจ้าของ"},"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":"อัปเดตเนื้อหาข้อความที่แสดง","behavior":"อัปเดตเนื้อหาข้อความที่แสดง","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"แต่ละโฟลว์เป็นเจ้าของ id โอเวอร์เลย์ของตน off_all() ปล่อยเฉพาะโอเวอร์เลย์ของโฟลว์นั้น งาน UI ส่งไปที่ Android Main และอาจพักผู้เรียก เก็บบิลเดอร์โอเวอร์เลย์ที่เปลี่ยนค่าได้ในโฟลว์เจ้าของ"},"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":"Text content.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"ส่งคืนเครื่องมือสร้างข้อความซ้อนทับเดียวกัน","example":"# ตั้งค่าหรือตรวจสอบโอเวอร์เลย์ของโฟลว์นี้\nbadge = OverlayText(\"Ready\", (24, 120))\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":"แต่ละโฟลว์เป็นเจ้าของ id โอเวอร์เลย์ของตน off_all() ปล่อยเฉพาะโอเวอร์เลย์ของโฟลว์นั้น งาน UI ส่งไปที่ Android Main และอาจพักผู้เรียก เก็บบิลเดอร์โอเวอร์เลย์ที่เปลี่ยนค่าได้ในโฟลว์เจ้าของ"},"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":"ส่งคืนเครื่องมือสร้างข้อความซ้อนทับเดียวกัน","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":"แต่ละโฟลว์เป็นเจ้าของ id โอเวอร์เลย์ของตน off_all() ปล่อยเฉพาะโอเวอร์เลย์ของโฟลว์นั้น งาน UI ส่งไปที่ Android Main และอาจพักผู้เรียก เก็บบิลเดอร์โอเวอร์เลย์ที่เปลี่ยนค่าได้ในโฟลว์เจ้าของ"},"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":"ส่งคืนเครื่องมือสร้างข้อความซ้อนทับเดียวกัน","example":"# ตั้งค่าหรือตรวจสอบโอเวอร์เลย์ของโฟลว์นี้\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.background(\"#66000000\")\nbadge.show()\nbadge.background(None)","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":"แต่ละโฟลว์เป็นเจ้าของ id โอเวอร์เลย์ของตน off_all() ปล่อยเฉพาะโอเวอร์เลย์ของโฟลว์นั้น งาน UI ส่งไปที่ Android Main และอาจพักผู้เรียก เก็บบิลเดอร์โอเวอร์เลย์ที่เปลี่ยนค่าได้ในโฟลว์เจ้าของ"},"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":"ส่งคืนเครื่องมือสร้างข้อความซ้อนทับเดียวกัน","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":"แต่ละโฟลว์เป็นเจ้าของ id โอเวอร์เลย์ของตน off_all() ปล่อยเฉพาะโอเวอร์เลย์ของโฟลว์นั้น งาน UI ส่งไปที่ Android Main และอาจพักผู้เรียก เก็บบิลเดอร์โอเวอร์เลย์ที่เปลี่ยนค่าได้ในโฟลว์เจ้าของ"},"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":"ส่งคืนเครื่องมือสร้างข้อความซ้อนทับเดียวกัน","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":"กำหนดค่าการติดตามการโต้ตอบ หากธงทั้งหมดเป็นเท็จ ข้อความจะคงอยู่ที่ตำแหน่งที่ประกาศไว้","behavior":"กำหนดค่าการติดตามการโต้ตอบ หากธงทั้งหมดเป็นเท็จ ข้อความจะคงอยู่ที่ตำแหน่งที่ประกาศไว้","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"แต่ละโฟลว์เป็นเจ้าของ id โอเวอร์เลย์ของตน off_all() ปล่อยเฉพาะโอเวอร์เลย์ของโฟลว์นั้น งาน UI ส่งไปที่ Android Main และอาจพักผู้เรียก เก็บบิลเดอร์โอเวอร์เลย์ที่เปลี่ยนค่าได้ในโฟลว์เจ้าของ"},"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":"Track press/release state.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"move","type":"Boolean","defaultValue":"False","description":"Allow user drag to move text.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"hold","type":"Boolean","defaultValue":"False","description":"Track hold state.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"hold_ms","type":"Number","defaultValue":"600","description":"Hold threshold to treat interaction as holding, measured in milliseconds.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"ส่งคืนเครื่องมือสร้างข้อความซ้อนทับเดียวกัน","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":"รับจุดซ้ายบนปัจจุบันของข้อความซ้อนทับนี้ ตำแหน่งนี้ได้รับการอัปเดตหลังจากการลากย้าย","behavior":"รับจุดซ้ายบนปัจจุบันของข้อความซ้อนทับนี้ ตำแหน่งนี้ได้รับการอัปเดตหลังจากการลากย้าย","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"แต่ละโฟลว์เป็นเจ้าของ id โอเวอร์เลย์ของตน off_all() ปล่อยเฉพาะโอเวอร์เลย์ของโฟลว์นั้น งาน UI ส่งไปที่ Android Main และอาจพักผู้เรียก เก็บบิลเดอร์โอเวอร์เลย์ที่เปลี่ยนค่าได้ในโฟลว์เจ้าของ"},"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":"รับขอบเขตที่ล้อมรอบขอบเขตข้อความซ้อนทับปัจจุบัน คืนค่า \"ไม่มี\" เมื่อมองไม่เห็นการซ้อนทับหรือยังไม่ได้วัด","behavior":"รับขอบเขตที่ล้อมรอบขอบเขตข้อความซ้อนทับปัจจุบัน คืนค่า \"ไม่มี\" เมื่อมองไม่เห็นการซ้อนทับหรือยังไม่ได้วัด","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"แต่ละโฟลว์เป็นเจ้าของ id โอเวอร์เลย์ของตน off_all() ปล่อยเฉพาะโอเวอร์เลย์ของโฟลว์นั้น งาน UI ส่งไปที่ Android Main และอาจพักผู้เรียก เก็บบิลเดอร์โอเวอร์เลย์ที่เปลี่ยนค่าได้ในโฟลว์เจ้าของ"},"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":"แสดงการซ้อนทับข้อความ (หรือแสดงอีกครั้งหลังจากซ่อน ())","behavior":"แสดงการซ้อนทับข้อความ (หรือแสดงอีกครั้งหลังจากซ่อน ())","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"แต่ละโฟลว์เป็นเจ้าของ id โอเวอร์เลย์ของตน off_all() ปล่อยเฉพาะโอเวอร์เลย์ของโฟลว์นั้น งาน UI ส่งไปที่ Android Main และอาจพักผู้เรียก เก็บบิลเดอร์โอเวอร์เลย์ที่เปลี่ยนค่าได้ในโฟลว์เจ้าของ"},"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))\nprint(badge.show())","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-hide","kind":"METHOD","parentKey":"class-overlaytext","name":"hide","signature":"overlay.hide()","description":"ซ่อนข้อความซ้อนทับ แต่เก็บมุมมองแคชไว้เพื่อให้แสดงได้เร็วขึ้น ()","behavior":"ซ่อนข้อความซ้อนทับ แต่เก็บมุมมองแคชไว้เพื่อให้แสดงได้เร็วขึ้น ()","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"แต่ละโฟลว์เป็นเจ้าของ id โอเวอร์เลย์ของตน off_all() ปล่อยเฉพาะโอเวอร์เลย์ของโฟลว์นั้น งาน UI ส่งไปที่ Android Main และอาจพักผู้เรียก เก็บบิลเดอร์โอเวอร์เลย์ที่เปลี่ยนค่าได้ในโฟลว์เจ้าของ"},"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":"แต่ละโฟลว์เป็นเจ้าของ id โอเวอร์เลย์ของตน off_all() ปล่อยเฉพาะโอเวอร์เลย์ของโฟลว์นั้น งาน UI ส่งไปที่ Android Main และอาจพักผู้เรียก เก็บบิลเดอร์โอเวอร์เลย์ที่เปลี่ยนค่าได้ในโฟลว์เจ้าของ"},"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":"คืนสถานะการโต้ตอบปัจจุบัน แผนที่สถานะ: 0=IDLE, 1=PRESSED, 2=MOVING, 3=HOLDING, 4=RELEASED, 5=HIDDEN, 6=OFF. การอ่าน state() รีเซ็ตอัตโนมัติ PRESSED และ RELEASED กลับไปที่ IDLE สำหรับการสำรวจครั้งถัดไป การย้ายและการถือครองไม่ได้รีเซ็ตอัตโนมัติ","behavior":"คืนสถานะการโต้ตอบปัจจุบัน แผนที่สถานะ: 0=IDLE, 1=PRESSED, 2=MOVING, 3=HOLDING, 4=RELEASED, 5=HIDDEN, 6=OFF. การอ่าน state() รีเซ็ตอัตโนมัติ PRESSED และ RELEASED กลับไปที่ IDLE สำหรับการสำรวจครั้งถัดไป การย้ายและการถือครองไม่ได้รีเซ็ตอัตโนมัติ","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"แต่ละโฟลว์เป็นเจ้าของ id โอเวอร์เลย์ของตน off_all() ปล่อยเฉพาะโอเวอร์เลย์ของโฟลว์นั้น งาน UI ส่งไปที่ Android Main และอาจพักผู้เรียก เก็บบิลเดอร์โอเวอร์เลย์ที่เปลี่ยนค่าได้ในโฟลว์เจ้าของ"},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"พจนานุกรมระบุสถานะพร้อม 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":"ส่งกลับตัวจับเวลาเดียวกันสำหรับการผูกมัด","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":"ส่งกลับตัวจับเวลาเดียวกันสำหรับการผูกมัด","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":"นับต่อจากสถานะหยุดชั่วคราว","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":"ส่งกลับตัวจับเวลาเดียวกันสำหรับการผูกมัด","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":"ส่งกลับตัวจับเวลาเดียวกันสำหรับการผูกมัด","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":"ส่งกลับตัวจับเวลาเดียวกันสำหรับการผูกมัด","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":"ส่งกลับตัวจับเวลาเดียวกันสำหรับการผูกมัด","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":"Target milliseconds threshold.","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 model handle for scripts. The model type must be selected in Template Manager metadata. Supported outputs are YOLOv8/YOLO11 object detection [1,N,4+C]/[1,4+C,N], YOLO26 end-to-end detection [1,N,6]/[N,6], YOLO11/YOLO26 image classification [1,C], and MobileNetV3 image classification [1,C]. Runtime detects FLOAT32, INT8, or UINT8 tensor precision from the model and dequantizes quantized detection and classification outputs before applying thresholds. Classification matches return class confidence and metadata without point or bounds. Inference methods require a local model file; when local file is missing and runtime download fails, script raises a runtime error.","behavior":"TFLite model handle for scripts. The model type must be selected in Template Manager metadata. Supported outputs are YOLOv8/YOLO11 object detection [1,N,4+C]/[1,4+C,N], YOLO26 end-to-end detection [1,N,6]/[N,6], YOLO11/YOLO26 image classification [1,C], and MobileNetV3 image classification [1,C]. Runtime detects FLOAT32, INT8, or UINT8 tensor precision from the model and dequantizes quantized detection and classification outputs before applying thresholds. Classification matches return class confidence and metadata without point or bounds. Inference methods require a local model file; when local file is missing and runtime download fails, script raises a runtime error.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"Resolved preprocessing resize mode: LETTERBOX, STRETCH, or CROP_CENTER.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"color_mode","type":"String","defaultValue":"RGB","description":"Resolved preprocessing color mode: RGB, BGR, or GRAYSCALE.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"norm_mode","type":"String","defaultValue":"ZERO_ONE","description":"Resolved preprocessing normalization: ZERO_ONE, MINUS_ONE_ONE, IMAGENET, or CUSTOM.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"padding_color","type":"Int","defaultValue":"114","description":"Padding fill value (0 -> 255) used by LETTERBOX resize mode.","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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"เรียกใช้โมเดล TFLite ที่เลือกโดยไม่มีการกรองคลาสและส่งคืนรายการที่ตรงกันทั้งหมด เมื่อมีการระบุภูมิภาค รูปภาพบนหน้าจอจะถูกครอบตัดก่อนการประมวลผลล่วงหน้าและการอนุมาน สิ่งนี้สามารถลดความแม่นยำของโมเดลได้หากโมเดลไม่ได้รับการฝึกฝนกับรูปภาพที่ครอบตัดในทำนองเดียวกัน การจับคู่ประเภทไม่มีจุดหรือขอบเขต","behavior":"เรียกใช้โมเดล TFLite ที่เลือกโดยไม่มีการกรองคลาสและส่งคืนรายการที่ตรงกันทั้งหมด เมื่อมีการระบุภูมิภาค รูปภาพบนหน้าจอจะถูกครอบตัดก่อนการประมวลผลล่วงหน้าและการอนุมาน สิ่งนี้สามารถลดความแม่นยำของโมเดลได้หากโมเดลไม่ได้รับการฝึกฝนกับรูปภาพที่ครอบตัดในทำนองเดียวกัน การจับคู่ประเภทไม่มีจุดหรือขอบเขต","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"threshold","type":"Number","defaultValue":"0.5","description":"Confidence threshold in 0 -> 1.","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":"Maximum number of detections returned.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"debug","type":"Boolean","defaultValue":"False","description":"In Edit mode, true saves a preprocess preview and opens the runtime debug dialog. Run-only mode ignores the debug output and performs normal inference without a dialog. Detailed model-result rows and preprocess config stay in the dialog; returned Match objects do not include debug_result. Detection previews draw bbox/class labels; classification previews show the preprocessed input plus class scores.","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":"การควบคุมแบบ static สำหรับเริ่ม flow ของมาโครที่ตั้งชื่อให้ทำงานพร้อมกัน ได้สูงสุดสอง flow เบื้องหลังข้าง main flow และแต่ละชื่อมี invocation ที่ยังทำงานได้เพียงหนึ่งรายการ รวมช่วง pause หรือ stopping ด้วย Flow.start() คืนค่าทันทีเมื่อ coordinator รับ branch แล้ว flow เบื้องหลังเริ่ม flow เพื่อนได้ ตัวแปรแยกตาม branch และไม่รวมกลับไปยังผู้เรียก main flow จะรอ flow เบื้องหลังทั้งหมดก่อน Run จบ ชื่อผิดหรือซ้ำ พื้นที่ flow เต็ม ข้อผิดพลาดของ branch ใด ๆ System.stop() หรือ Main Stop จะจบมาโครทั้งหมด ปุ่ม dock ของ flow เบื้องหลังแต่ละหมายเลขทำได้เพียง Pause หรือ Resume ชั่วคราวเฉพาะ branch นั้น ไม่มี Stop เฉพาะ branch Pause หรือ Resume ของ Main ใช้กับทุก branch และ Resume ทั่วโลกจะล้างสถานะ pause เฉพาะ branch ด้วย gesture สัมผัสจากต่าง branch อาจยกเลิกกันเอง นโยบาย ScreenCapture และ audio capture ใช้ร่วมกันทั่วโลก Storage ใช้คีย์ถาวรร่วมกันระหว่าง branch และไม่ใช่ช่องส่งข้อความระหว่างโปรเซส","behavior":"การควบคุมแบบ static สำหรับเริ่ม flow ของมาโครที่ตั้งชื่อให้ทำงานพร้อมกัน ได้สูงสุดสอง flow เบื้องหลังข้าง main flow และแต่ละชื่อมี invocation ที่ยังทำงานได้เพียงหนึ่งรายการ รวมช่วง pause หรือ stopping ด้วย Flow.start() คืนค่าทันทีเมื่อ coordinator รับ branch แล้ว flow เบื้องหลังเริ่ม flow เพื่อนได้ ตัวแปรแยกตาม branch และไม่รวมกลับไปยังผู้เรียก main flow จะรอ flow เบื้องหลังทั้งหมดก่อน Run จบ ชื่อผิดหรือซ้ำ พื้นที่ flow เต็ม ข้อผิดพลาดของ branch ใด ๆ System.stop() หรือ Main Stop จะจบมาโครทั้งหมด ปุ่ม dock ของ flow เบื้องหลังแต่ละหมายเลขทำได้เพียง Pause หรือ Resume ชั่วคราวเฉพาะ branch นั้น ไม่มี Stop เฉพาะ branch Pause หรือ Resume ของ Main ใช้กับทุก branch และ Resume ทั่วโลกจะล้างสถานะ pause เฉพาะ branch ด้วย gesture สัมผัสจากต่าง branch อาจยกเลิกกันเอง นโยบาย ScreenCapture และ audio capture ใช้ร่วมกันทั่วโลก Storage ใช้คีย์ถาวรร่วมกันระหว่าง branch และไม่ใช่ช่องส่งข้อความระหว่างโปรเซส","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"yes","details":"Flow.start สร้างตัวประมวลผลเบื้องหลังที่แยกกันและคืนเลขลำดับ Int ไม่ใช่ handle มีโฟลว์เบื้องหลังได้สูงสุดสองโฟลว์ โฟลว์หลักรอให้เบื้องหลังจบ ข้อผิดพลาดหรือ System.stop() หยุดทั้ง Run"},"limitations":[],"relatedApis":["class-system-static-method-stop","class-storage","class-screencapture"],"isCallable":false,"fields":[],"fieldDocs":[{"name":"params","type":"dict","defaultValue":null,"description":"อินพุตที่คัดลอกแบบอ่านอย่างเดียวสำหรับ branch ปัจจุบัน main flow ได้รับ dict ว่าง การอ่านแต่ละครั้งคืนข้อมูลที่ปลอดภัยและแยกจาก collection ของ coordinator และ VM แม่","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# เริ่ม worker ที่ตั้งค่าไว้ขณะที่ main flow ยังทำงาน\nworker_no = Flow.start(\"watch_enemy\", {\"labels\": [\"boss\", \"guard\"]})\nMacroPanel.notify(\"Background flow #\" + str(worker_no) + \" started\")","aliases":[],"group":null},{"key":"class-flow-static-method-start","kind":"STATIC_METHOD","parentKey":"class-flow","name":"start","signature":"Flow.start(name, params=None)","description":"เริ่ม flow ที่ตั้งชื่อไว้หนึ่งรายการโดยไม่บล็อกผู้เรียก coordinator ของมาโครจะตรวจชื่อ Params ถูกคัดลอกก่อนส่งและมีได้เฉพาะ None, Boolean, จำนวนจำกัด, String, list, tuple และ dict ที่มีคีย์ String ภายในขีดจำกัดความลึกและขนาดของ runtime โดยจะปฏิเสธ callable ค่า domain/ทรัพยากร และ collection แบบวนรอบ","behavior":"เริ่ม flow ที่ตั้งชื่อไว้หนึ่งรายการโดยไม่บล็อกผู้เรียก coordinator ของมาโครจะตรวจชื่อ Params ถูกคัดลอกก่อนส่งและมีได้เฉพาะ None, Boolean, จำนวนจำกัด, String, list, tuple และ dict ที่มีคีย์ String ภายในขีดจำกัดความลึกและขนาดของ runtime โดยจะปฏิเสธ callable ค่า domain/ทรัพยากร และ collection แบบวนรอบ","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"คืนค่าหลังตัวประสานยอมรับโฟลว์ที่มีชื่อ ไม่รอให้โฟลว์นั้นจบ ข้อมูลเข้าถูกคัดลอกก่อนส่ง"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"ชื่อ flow ที่ตั้งค่าไว้ตรงตามที่ macro coordinator แก้ไขได้","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"params","type":"dict?","defaultValue":"None","description":"อินพุตที่คัดลอกอย่างปลอดภัยแบบไม่บังคับ ซึ่งจะแสดงเป็น Flow.params ใน branch ที่เริ่ม","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Int","returnDescription":"หมายเลข instance ของ branch ที่เป็นบวกและเพิ่มขึ้นเรื่อย ๆ สำหรับสถานะ dock และ log ไม่ใช่ handle ควบคุม","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-list","kind":"COLLECTION","parentKey":null,"name":"list","signature":"list(iterable=(), /)","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":"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":"สร้างรายการว่างหรือคัดลอกรายการจาก iterable หนึ่งรายการลงในรายการใหม่ที่แก้ไขได้","behavior":"สร้างรายการว่างหรือคัดลอกรายการจาก iterable หนึ่งรายการลงในรายการใหม่ที่แก้ไขได้","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":"สร้างรายการแบบอินไลน์ตามตัวอักษร นี่เป็นรูปแบบที่สั้นที่สุดเมื่อคุณรู้รายการแล้ว","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":"Each item written inside the brackets.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"list","returnDescription":"รายการที่ไม่แน่นอนใหม่ที่รักษาลำดับตามตัวอักษร","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":"สร้างรายการโดยการวนซ้ำผ่านรายการอื่นที่ทำซ้ำได้ รองรับ for/if clause หลายรายการ และเป้าหมายแบบวนซ้ำจะยังคงอยู่ในระดับที่เข้าใจได้","behavior":"สร้างรายการโดยการวนซ้ำผ่านรายการอื่นที่ทำซ้ำได้ รองรับ for/if clause หลายรายการ และเป้าหมายแบบวนซ้ำจะยังคงอยู่ในระดับที่เข้าใจได้","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":"Loop target for the current item. Starred targets are not supported.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"iterable","type":"Iterable","defaultValue":null,"description":"Source values to loop through.","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":"Increment between items. Cannot be 0.","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":"อ่านหนึ่งรายการตามดัชนี ดัชนีเชิงลบนับจากจุดสิ้นสุด","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 source list.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"index","type":"Int","defaultValue":null,"description":"Item index. Use -1 for the last item.","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":"คัดลอกส่วนหนึ่งของรายการโดยใช้การแบ่งส่วนแบบ Python ขอบเขตที่ละไว้ใช้จุดเริ่มต้นหรือจุดสิ้นสุด ดัชนีติดลบนับจากจุดสิ้นสุด","behavior":"คัดลอกส่วนหนึ่งของรายการโดยใช้การแบ่งส่วนแบบ Python ขอบเขตที่ละไว้ใช้จุดเริ่มต้นหรือจุดสิ้นสุด ดัชนีติดลบนับจากจุดสิ้นสุด","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":"แยกรายการออกเป็นเป้าหมายการมอบหมายที่ตรงกัน รองรับเป้าหมายที่ซ้อนกัน แต่ไม่รองรับเป้าหมายที่ติดดาว เช่น *rest","behavior":"แยกรายการออกเป็นเป้าหมายการมอบหมายที่ตรงกัน รองรับเป้าหมายที่ซ้อนกัน แต่ไม่รองรับเป้าหมายที่ติดดาว เช่น *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":"Assignment targets matching the list item count.","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":"เพิ่มทุกรายการจาก iterable อื่นต่อท้ายรายการปัจจุบัน","behavior":"เพิ่มทุกรายการจาก iterable อื่นต่อท้ายรายการปัจจุบัน","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":"แทรกรายการหนึ่งก่อนดัชนีที่กำหนด ดัชนีติดลบหรือเกินช่วงจะถูกจำกัดเหมือน Python","behavior":"แทรกรายการหนึ่งก่อนดัชนีที่กำหนด ดัชนีติดลบหรือเกินช่วงจะถูกจำกัดเหมือน Python","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":"ขอบเขตเริ่มต้นแบบไม่บังคับ ค่าติดลบนับจากท้ายรายการ","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 ในที่เดิมโดยใช้กฎการเรียงแบบเสถียรเดียวกับ sorted()","behavior":"เรียงลำดับ list ในที่เดิมโดยใช้กฎการเรียงแบบเสถียรเดียวกับ sorted()","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"การทำงานประมวลผลค่าในโฟลว์ผู้เรียก callable ของ key ก็ทำในนั้นและอาจรอหรือมีผลข้างเคียง ไม่ได้หมายถึงการทำงานแบบอะซิงโครนัส"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Callable?","defaultValue":"None","description":"ฟังก์ชันเสริมที่คืนค่าคีย์เปรียบเทียบสำหรับแต่ละรายการ","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":"สร้างสำเนารายการที่ไม่แน่นอนแบบตื้น","behavior":"สร้างสำเนารายการที่ไม่แน่นอนแบบตื้น","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"การทำงานกับค่าทำในโฟลว์ที่เรียก โดยไม่ตั้งใจรอการจับภาพ ท่าทาง หรือข้อมูลจากผู้ใช้ สร้างคอนเทนเนอร์และบิลเดอร์ที่เปลี่ยนค่าได้แยกในแต่ละโฟลว์ การแยกนี้ไม่รับประกันการซิงโครไนซ์ออบเจ็กต์ที่แชร์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list","returnDescription":"รายการที่ไม่แน่นอนใหม่ที่มีการอ้างอิงรายการเดียวกัน","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":"คอลเลกชันแบบอ่านอย่างเดียวที่สั่งซื้อ ใช้ตัวอักษรทูเปิลเมื่อค่าควรคงที่หลังจากการสร้างหรือเมื่อส่งคืนค่าที่จัดกลุ่มเพื่อทำลายโครงสร้าง","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":"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":"Create an empty tuple or clone another iterable as tuple. Use a tuple literal for multiple inline values.","behavior":"Create an empty tuple or clone another iterable as tuple. Use a tuple literal for multiple inline values.","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":"None","description":"Optional iterable to clone into a tuple.","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":"สร้างทูเพิลแบบอินไลน์โดยใช้วงเล็บและเครื่องหมายจุลภาค","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":"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":"อ่านหนึ่งรายการทูเพิลตามดัชนี ดัชนีเชิงลบนับจากจุดสิ้นสุด","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":"Source tuple.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"index","type":"Int","defaultValue":null,"description":"Item index. Use -1 for the last item.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"รายการทูเพิลที่ดัชนี หรือไม่มีเมื่ออยู่นอกช่วง","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":"คัดลอกส่วนหนึ่งของทูเพิลโดยใช้การแบ่งส่วนแบบ Python ขอบเขตที่ละไว้ใช้จุดเริ่มต้นหรือจุดสิ้นสุด ดัชนีติดลบนับจากจุดสิ้นสุด","behavior":"คัดลอกส่วนหนึ่งของทูเพิลโดยใช้การแบ่งส่วนแบบ Python ขอบเขตที่ละไว้ใช้จุดเริ่มต้นหรือจุดสิ้นสุด ดัชนีติดลบนับจากจุดสิ้นสุด","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":"แกะรายการทูเพิลออกเป็นเป้าหมายการมอบหมายที่ตรงกัน รองรับเป้าหมายที่ซ้อนกัน แต่ไม่รองรับเป้าหมายที่ติดดาว เช่น *rest","behavior":"แกะรายการทูเพิลออกเป็นเป้าหมายการมอบหมายที่ตรงกัน รองรับเป้าหมายที่ซ้อนกัน แต่ไม่รองรับเป้าหมายที่ติดดาว เช่น *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":"Assignment targets matching the tuple item count.","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":"Find the first matching item index and fail visibly when absent.","behavior":"Find the first matching item index and fail visibly when absent.","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":"Start index for the search.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(tuple)","description":"Stop index for the search.","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-set","kind":"COLLECTION","parentKey":null,"name":"set","signature":"set(iterable=None, /)","description":"คอลเลกชันของค่าที่ไม่ซ้ำที่ไม่แน่นอน CogniTab รักษาลำดับการวนซ้ำให้คงที่ ดังนั้นเอาต์พุตสคริปต์จึงอ่านง่าย","behavior":"คอลเลกชันของค่าที่ไม่ซ้ำที่ไม่แน่นอน CogniTab รักษาลำดับการวนซ้ำให้คงที่ ดังนั้นเอาต์พุตสคริปต์จึงอ่านง่าย","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":"สร้างชุดว่างหรือรวบรวมค่าที่ไม่ซ้ำกันจากชุดที่ทำซ้ำได้อื่น รวมถึงนิพจน์ตัวสร้าง","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":"None","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":"สร้างชุดตัวอักษรอินไลน์ ใช้ dict() หรือ {} สำหรับพจนานุกรมเปล่า ใช้ set() สำหรับเซตว่าง","behavior":"สร้างชุดตัวอักษรอินไลน์ ใช้ dict() หรือ {} สำหรับพจนานุกรมเปล่า ใช้ set() สำหรับเซตว่าง","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":"สร้างชุดโดยการวนซ้ำผ่านค่าที่คำนวณซ้ำได้และคงค่าที่คำนวณไว้ไม่ซ้ำกัน รองรับหลายคำสั่ง for/if","behavior":"สร้างชุดโดยการวนซ้ำผ่านค่าที่คำนวณซ้ำได้และคงค่าที่คำนวณไว้ไม่ซ้ำกัน รองรับหลายคำสั่ง 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":"Loop target for the current item. Starred targets are not supported.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"iterable","type":"Iterable","defaultValue":null,"description":"Source values to loop through.","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 used for membership.","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":"ลบค่าที่มีอยู่ ค่าที่หายไปทำให้เกิดข้อผิดพลาดรันไทม์เพื่อให้มองเห็นข้อผิดพลาดได้","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 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":"Remove and return one value from the set. Empty sets raise a runtime error.","behavior":"Remove and return one value from the set. Empty sets raise a runtime error.","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":"Add values from one or more iterables into the set.","behavior":"Add values from one or more iterables into the 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":"Return a new set with values from this set and the provided iterables.","behavior":"Return a new set with values from this set and the provided iterables.","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":"Return a new set containing values that also exist in every provided iterable.","behavior":"Return a new set containing values that also exist in every provided iterable.","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":"Return a new set without values found in the provided iterables.","behavior":"Return a new set without values found in the provided iterables.","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":"คัดลอกชุดลงในชุดที่ไม่แน่นอนใหม่","behavior":"คัดลอกชุดลงในชุดที่ไม่แน่นอนใหม่","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":"Create an empty dictionary, copy a mapping or iterable of pairs, or build entries from keyword arguments.","behavior":"Create an empty dictionary, copy a mapping or iterable of pairs, or build entries from keyword arguments.","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":"None","description":"Mapping or iterable of two-item pairs to copy.","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"},{"name":"key=value","type":"Any?","defaultValue":null,"description":"Keyword entries to add after the source mapping.","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":"สร้างพจนานุกรมด้วยค่าสตริง ตัวเลข บูลีน หรืออ็อบเจ็กต์","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":"String","defaultValue":null,"description":"dict key.","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":"สร้างพจนานุกรมจากการทำซ้ำได้ในขณะที่รักษาลำดับการแทรก รองรับหลายคำสั่ง for/if","behavior":"สร้างพจนานุกรมจากการทำซ้ำได้ในขณะที่รักษาลำดับการแทรก รองรับหลายคำสั่ง 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":"Loop target for the current item. Starred targets are not supported.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"iterable","type":"Iterable","defaultValue":null,"description":"Source values to loop through.","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":"อ่านหนึ่งค่าด้วยคีย์ คีย์ที่หายไปส่งคืนไม่มี","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 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":"ค่าที่เก็บไว้สำหรับคีย์นั้น หรือไม่มีเมื่อไม่มีคีย์","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nmode = settings[\"mode\"]        # คืนค่า farm\nmissing = settings[\"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":"Get key/value pairs as a list of two-item tuples in insertion order.","behavior":"Get key/value pairs as a list of two-item tuples in insertion order.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"การทำงานกับค่าทำในโฟลว์ที่เรียก โดยไม่ตั้งใจรอการจับภาพ ท่าทาง หรือข้อมูลจากผู้ใช้ สร้างคอนเทนเนอร์และบิลเดอร์ที่เปลี่ยนค่าได้แยกในแต่ละโฟลว์ การแยกนี้ไม่รับประกันการซิงโครไนซ์ออบเจ็กต์ที่แชร์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list","returnDescription":"A list of (key, value) tuples.","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, default=None, /)","description":"Remove one key and return its value, or return the default when missing.","behavior":"Remove one key and return its value, or return the default when 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 remove.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"default","type":"Any?","defaultValue":"None","description":"Fallback returned when the key is missing.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"Removed value or fallback 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":"Copy the dictionary into a new mutable dictionary.","behavior":"Copy the dictionary into a new mutable 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":"A new dictionary with the same entries.","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":"Update this dictionary from another mapping, pairs iterable, and keyword entries.","behavior":"Update this dictionary from another mapping, pairs iterable, and keyword entries.","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":"None","description":"Mapping or pairs to merge.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"items","type":"Any?","defaultValue":null,"description":"Keyword entries to write.","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":"รับคีย์พจนานุกรมเป็นรายการตามลำดับการแทรก","behavior":"รับคีย์พจนานุกรมเป็นรายการตามลำดับการแทรก","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"การทำงานกับค่าทำในโฟลว์ที่เรียก โดยไม่ตั้งใจรอการจับภาพ ท่าทาง หรือข้อมูลจากผู้ใช้ สร้างคอนเทนเนอร์และบิลเดอร์ที่เปลี่ยนค่าได้แยกในแต่ละโฟลว์ การแยกนี้ไม่รับประกันการซิงโครไนซ์ออบเจ็กต์ที่แชร์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list","returnDescription":"รายการคีย์","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nkeys = settings.keys()\nfirst_key = keys[0]                 # คืนค่า mode","aliases":[],"group":"FLOW"},{"key":"class-dict-method-values-method","kind":"METHOD","parentKey":"class-dict","name":"values_method","signature":"dictionary.values()","description":"รับค่าพจนานุกรมเป็นรายการตามลำดับการแทรก","behavior":"รับค่าพจนานุกรมเป็นรายการตามลำดับการแทรก","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"การทำงานกับค่าทำในโฟลว์ที่เรียก โดยไม่ตั้งใจรอการจับภาพ ท่าทาง หรือข้อมูลจากผู้ใช้ สร้างคอนเทนเนอร์และบิลเดอร์ที่เปลี่ยนค่าได้แยกในแต่ละโฟลว์ การแยกนี้ไม่รับประกันการซิงโครไนซ์ออบเจ็กต์ที่แชร์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list","returnDescription":"รายการค่า","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nvalues = settings.values()\nlast_value = 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":"วนซ้ำคีย์พจนานุกรมตามลำดับเดียวกับที่เขียนด้วยตัวอักษร","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":"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) จากนั้นอ่านตามความยาว/ดัชนี/การดำเนินการวนซ้ำ","behavior":"การรวบรวมค่าข้อความ สร้างโดยตัวอักษรสตริงหรือ str(value) จากนั้นอ่านตามความยาว/ดัชนี/การดำเนินการวนซ้ำ","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":"Convert a number, boolean, or other value to text. Large or deeply nested structured values use a bounded preview with explicit omission markers, while a direct string remains unchanged.","behavior":"Convert a number, boolean, or other value to text. Large or deeply nested structured values use a bounded preview with explicit omission markers, while a direct string remains unchanged.","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":"อ่านอักขระหนึ่งตัวตามดัชนี ดัชนีเชิงลบนับจากจุดสิ้นสุด","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":"Source string.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"index","type":"Int","defaultValue":null,"description":"Character index. Use -1 for the last character.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"String?","returnDescription":"สตริงหนึ่งอักขระ หรือไม่มีหากอยู่นอกช่วง","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":"คัดลอกสตริงย่อยโดยใช้การแบ่งส่วนแบบ Python ขอบเขตที่ละไว้ใช้จุดเริ่มต้นหรือจุดสิ้นสุด ดัชนีติดลบนับจากจุดสิ้นสุด","behavior":"คัดลอกสตริงย่อยโดยใช้การแบ่งส่วนแบบ Python ขอบเขตที่ละไว้ใช้จุดเริ่มต้นหรือจุดสิ้นสุด ดัชนีติดลบนับจากจุดสิ้นสุด","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":"Characters to trim instead of whitespace.","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":"Characters to trim instead of whitespace.","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":"Characters to trim instead of whitespace.","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":"Check whether the selected slice starts with a prefix.","behavior":"Check whether the selected slice starts with a 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","defaultValue":null,"description":"Prefix to test.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int","defaultValue":"0","description":"Start index for the check.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(string)","description":"Stop index for the check.","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":"Check whether the selected slice ends with a suffix.","behavior":"Check whether the selected slice ends with a 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","defaultValue":null,"description":"Suffix to test.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int","defaultValue":"0","description":"Start index for the check.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(string)","description":"Stop index for the check.","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":"Start index for the search.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(string)","description":"Stop index for the search.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"First matching index, or -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":"Find the first substring index and fail visibly when absent.","behavior":"Find the first substring index and fail visibly 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 that must exist.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int","defaultValue":"0","description":"Start index for the search.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(string)","description":"Stop index for the search.","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":"Text to replace.","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":false,"requirement":"optional","callingMode":"positional-only"}],"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":"Split a string into a list of text parts.","behavior":"Split a string into a list of text parts.","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":"Separator text. None splits on whitespace.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"maxsplit","type":"Int","defaultValue":"-1","description":"Maximum split count; negative means all.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"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":"Join an iterable of strings using this string as the separator.","behavior":"Join an iterable of strings using this string as the separator.","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":"Substring to count.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int","defaultValue":"0","description":"Start index for the count.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(string)","description":"Stop index for the count.","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":"Check whether the string is non-empty and all characters are digits.","behavior":"Check whether the string is non-empty and all characters are digits.","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":"Check whether the string is non-empty and all characters are letters or digits.","behavior":"Check whether the string is non-empty and all characters are letters or digits.","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 or digits only.","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":"สร้างและแสดงแผงอินพุตรันไทม์สำหรับพารามิเตอร์มาโครที่ควบคุมสคริปต์","behavior":"สร้างและแสดงแผงอินพุตรันไทม์สำหรับพารามิเตอร์มาโครที่ควบคุมสคริปต์","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"เก็บบิลเดอร์แผงไว้ในแต่ละโฟลว์ show() และ notify() แบบโต้ตอบเรียงผ่านล็อก prompt ของรันไทม์และรอผู้ใช้ error() จบด้วยข้อผิดพลาดที่กระทบทั้ง Run"},"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 ทางเลือกที่เก็บไว้เพื่อความเข้ากันได้ ค่าอินพุตของ MacroPanel จะถูกกู้คืนจาก Storage และบันทึกเข้า Storage ตามชื่อตัวแปร ไม่ใช่ตาม version สามารถแก้ไขหลังสร้างได้","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 ทางเลือกที่เก็บไว้เพื่อความเข้ากันได้ ค่าอินพุตของ MacroPanel จะถูกกู้คืนจาก Storage และบันทึกเข้า Storage ตามชื่อตัวแปร ไม่ใช่ตาม version","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":"รอการยืนยันจากผู้ใช้ผ่านล็อก prompt ร่วมของรันไทม์ prompt พร้อมกันจะเรียงลำดับ"},"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":"เกิดข้อผิดพลาดสคริปต์ที่ทำให้ทุกสาขาของ Run หยุด ไม่ใช่ prompt รอการยืนยัน"},"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":"เพิ่มช่องข้อความที่แก้ไขได้ ใช้ desc สำหรับข้อความตัวช่วยขนาดเล็กใต้ช่อง และ input_type=\"number\" เพื่อแสดงอินพุตตัวเลขในขณะที่ค่าที่ส่งคืนยังคงเป็นสตริง","behavior":"เพิ่มช่องข้อความที่แก้ไขได้ ใช้ desc สำหรับข้อความตัวช่วยขนาดเล็กใต้ช่อง และ input_type=\"number\" เพื่อแสดงอินพุตตัวเลขในขณะที่ค่าที่ส่งคืนยังคงเป็นสตริง","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"เก็บบิลเดอร์แผงไว้ในแต่ละโฟลว์ show() และ notify() แบบโต้ตอบเรียงผ่านล็อก prompt ของรันไทม์และรอผู้ใช้ error() จบด้วยข้อผิดพลาดที่กระทบทั้ง Run"},"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":"Variable name to return in panel result.","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","defaultValue":"\"\"","description":"Default text value.","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":"Use \"text\" for normal text or \"number\" for numeric input. The result value remains a String.","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":"เก็บบิลเดอร์แผงไว้ในแต่ละโฟลว์ show() และ notify() แบบโต้ตอบเรียงผ่านล็อก prompt ของรันไทม์และรอผู้ใช้ error() จบด้วยข้อผิดพลาดที่กระทบทั้ง Run"},"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":"Variable name.","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":"Default checked state.","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":"เก็บบิลเดอร์แผงไว้ในแต่ละโฟลว์ show() และ notify() แบบโต้ตอบเรียงผ่านล็อก prompt ของรันไทม์และรอผู้ใช้ error() จบด้วยข้อผิดพลาดที่กระทบทั้ง Run"},"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":"Variable name.","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":"Default toggle state.","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)","description":"เพิ่มตัวเลือกกลุ่มวิทยุ หรือแสดงเป็นดรอปดาวน์เมื่อ dropdown=True","behavior":"เพิ่มตัวเลือกกลุ่มวิทยุ หรือแสดงเป็นดรอปดาวน์เมื่อ dropdown=True","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"เก็บบิลเดอร์แผงไว้ในแต่ละโฟลว์ show() และ notify() แบบโต้ตอบเรียงผ่านล็อก prompt ของรันไทม์และรอผู้ใช้ error() จบด้วยข้อผิดพลาดที่กระทบทั้ง Run"},"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":"Variable name.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"options","type":"list[String]","defaultValue":null,"description":"Selectable options.","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|None","defaultValue":"None","description":"Default option label or 0-based option index; None selects the first option.","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"}],"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":"เก็บบิลเดอร์แผงไว้ในแต่ละโฟลว์ show() และ notify() แบบโต้ตอบเรียงผ่านล็อก prompt ของรันไทม์และรอผู้ใช้ error() จบด้วยข้อผิดพลาดที่กระทบทั้ง Run"},"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":"Variable name.","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":"Maximum value.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"step","type":"Number","defaultValue":"1","description":"Step size between values.","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":"Default value, clamped to 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":"เก็บบิลเดอร์แผงไว้ในแต่ละโฟลว์ show() และ notify() แบบโต้ตอบเรียงผ่านล็อก prompt ของรันไทม์และรอผู้ใช้ error() จบด้วยข้อผิดพลาดที่กระทบทั้ง Run"},"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":"Variable name.","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":"Maximum integer value.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"step","type":"Number","defaultValue":"1","description":"Step size.","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":"Default value, clamped to 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":"เก็บบิลเดอร์แผงไว้ในแต่ละโฟลว์ show() และ notify() แบบโต้ตอบเรียงผ่านล็อก prompt ของรันไทม์และรอผู้ใช้ error() จบด้วยข้อผิดพลาดที่กระทบทั้ง Run"},"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-show","kind":"METHOD","parentKey":"class-macropanel","name":"show","signature":"panel.show()","description":"แสดงพาเนลและคืนค่าอินพุตของผู้ใช้ตามชนิดข้อมูล ค่า Storage ที่มีชื่อตัวแปรตรงกันจะถูกใช้เป็นค่าเริ่มต้นของช่อง และค่าที่ยืนยันแล้วจะถูกบันทึกกลับเข้า Storage ตามชื่อตัวแปร: ค่า checkbox/toggle เป็น Boolean, ค่า slider เป็น Number, ค่า stepper เป็น Int, ค่า radio/dropdown เป็นดัชนีตัวเลือก Int แบบเริ่มที่ 0 และค่า edit text เป็น String สำหรับข้อความทั่วไป (หรือชนิดตัวเลข/ข้อมูลที่สอดคล้องกันตามการตั้งค่าหรือค่าที่บันทึก) หากคำสั่ง panel.show() เดิมเปิดซ้ำๆ โดยไม่มีการทำงานรันไทม์อื่น รันไทม์จะหยุดสคริปต์เพื่อหลีกเลี่ยงลูปพาเนลไม่สิ้นสุด","behavior":"แสดงพาเนลและคืนค่าอินพุตของผู้ใช้ตามชนิดข้อมูล ค่า Storage ที่มีชื่อตัวแปรตรงกันจะถูกใช้เป็นค่าเริ่มต้นของช่อง และค่าที่ยืนยันแล้วจะถูกบันทึกกลับเข้า Storage ตามชื่อตัวแปร: ค่า checkbox/toggle เป็น Boolean, ค่า slider เป็น Number, ค่า stepper เป็น Int, ค่า radio/dropdown เป็นดัชนีตัวเลือก Int แบบเริ่มที่ 0 และค่า edit text เป็น String สำหรับข้อความทั่วไป (หรือชนิดตัวเลข/ข้อมูลที่สอดคล้องกันตามการตั้งค่าหรือค่าที่บันทึก) หากคำสั่ง panel.show() เดิมเปิดซ้ำๆ โดยไม่มีการทำงานรันไทม์อื่น รันไทม์จะหยุดสคริปต์เพื่อหลีกเลี่ยงลูปพาเนลไม่สิ้นสุด","execution":{"blocking":"yes","threadSafety":"serialized","parallel":"conditional","details":"รอการยืนยันจากผู้ใช้ผ่านล็อก prompt ร่วมของรันไทม์ prompt พร้อมกันจะเรียงลำดับ"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"dict ของ VariableName -> ค่าที่พิมพ์","example":"# สร้างแผงควบคุมและรอผู้ใช้ยืนยัน\npanel = MacroPanel(\"Settings\")\npanel.checkbox(\"enabled\", checked=True)\nresult = panel.show()\nprint(result)","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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["dev","battery","screen","memory"],"fieldDocs":[{"name":"dev","type":"dict","defaultValue":null,"description":"Device capability info (`isEmulator`, `sdk`, `language`, `darkmode`, `touch`, `capture`).","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"battery","type":"dict","defaultValue":null,"description":"Battery info (`percent`, `charging`, `temperature`, `health`).","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"screen","type":"dict","defaultValue":null,"description":"ข้อมูลหน้าจอ (`width`, `height`, `orientation`, `density`, `dpi`); `orientation` คือมุมหมุนของหน้าจอเป็นองศา: `0`, `90`, `180` หรือ `270`.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"memory","type":"dict","defaultValue":null,"description":"Memory info (`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":"รับการประทับเวลาปัจจุบันในหน่วยมิลลิวินาที","behavior":"รับการประทับเวลาปัจจุบันในหน่วยมิลลิวินาที","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number","returnDescription":"ยุคมิลลิวินาที","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":"รับชื่อเวอร์ชันแอป","behavior":"รับชื่อเวอร์ชันแอป","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"String","returnDescription":"ชื่อเวอร์ชันของแอป","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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"รับ Android SDK","behavior":"รับ Android SDK","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number","returnDescription":"จำนวนเต็มเวอร์ชัน Android SDK","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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"แสดงข้อความอวยพรของระบบ ค่าที่มีโครงสร้างจะถูกเรนเดอร์ด้วยฟอร์แมตเตอร์จอแสดงผล DSL ขนาดกะทัดรัด ดังนั้นโทสต์จึงสั้นและอ่านง่าย","behavior":"แสดงข้อความอวยพรของระบบ ค่าที่มีโครงสร้างจะถูกเรนเดอร์ด้วยฟอร์แมตเตอร์จอแสดงผล DSL ขนาดกะทัดรัด ดังนั้นโทสต์จึงสั้นและอ่านง่าย","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"หยุดทั้ง Run ของมาโคร รวมถึงโฟลว์เบื้องหลัง การทำงานไม่ดำเนินต่อหลังเรียก ไม่ใช่ API ยกเลิกเฉพาะโฟลว์"},"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"Optional minimized dock footprint width in pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"height","type":"Number?","defaultValue":"None","description":"Optional minimized dock footprint height in pixels.","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","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-back","kind":"STATIC_METHOD","parentKey":"class-system","name":"back","signature":"System.back()","description":"ดำเนินการย้อนกลับทั่วโลก","behavior":"ดำเนินการย้อนกลับทั่วโลก","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"'จริง' หากมีการส่งการดำเนินการ","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":"ดำเนินการ Home ทั่วโลก","behavior":"ดำเนินการ Home ทั่วโลก","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"'จริง' หากมีการส่งการดำเนินการ","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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"'จริง' หากมีการส่งการดำเนินการ","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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"'จริง' หากมีการส่งการดำเนินการ","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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"'จริง' หากมีการส่งการดำเนินการ","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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"'จริง' หากมีการส่งการดำเนินการ","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":"เปิดแผงการตั้งค่าด่วน","behavior":"เปิดแผงการตั้งค่าด่วน","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"'จริง' หากมีการส่งการดำเนินการ","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":"ทริกเกอร์การดำเนินการจับภาพหน้าจอทั่วโลก","behavior":"ทริกเกอร์การดำเนินการจับภาพหน้าจอทั่วโลก","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"'จริง' หากมีการส่งการดำเนินการ","example":"# อ่านข้อมูล Android หรือขอให้ทำงานระบบที่ระบุไว้\nprint(System.screenshot())","aliases":[],"group":"FLOW"},{"key":"class-screencapture","kind":"CLASS","parentKey":null,"name":"ScreenCapture","signature":"ScreenCapture","description":"ชุดควบคุมการจับภาพหน้าจอร่วมกันในการรันมาโครปัจจุบัน โดยปกติแคชอัตโนมัติจะใช้เฟรมซ้ำได้นานถึง 100 ms เพื่อลดงานจับภาพ หากต้องตรวจจับต่อเนื่องโดยใช้เฟรมล่าสุดที่มี ให้ใช้ auto_cache_off() ซึ่งเพิ่มภาระประมวลผลและการใช้แบตเตอรี่ ไม่รับประกันว่าจะทำงานเร็วขึ้นหรือได้พิกเซลที่เพิ่งวาดใหม่ ส่วน cache_on() จะปักหมุดเฟรมแยกต่างหากและมีลำดับความสำคัญเหนือการตั้งค่าแคชอัตโนมัติ","behavior":"ชุดควบคุมการจับภาพหน้าจอร่วมกันในการรันมาโครปัจจุบัน โดยปกติแคชอัตโนมัติจะใช้เฟรมซ้ำได้นานถึง 100 ms เพื่อลดงานจับภาพ หากต้องตรวจจับต่อเนื่องโดยใช้เฟรมล่าสุดที่มี ให้ใช้ auto_cache_off() ซึ่งเพิ่มภาระประมวลผลและการใช้แบตเตอรี่ ไม่รับประกันว่าจะทำงานเร็วขึ้นหรือได้พิกเซลที่เพิ่งวาดใหม่ ส่วน cache_on() จะปักหมุดเฟรมแยกต่างหากและมีลำดับความสำคัญเหนือการตั้งค่าแคชอัตโนมัติ","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"การควบคุมแคชอัปเดตนโยบายร่วมโดยไม่รอเฟรมหรือครบระยะเวลาที่ตั้ง การจับภาพถัดไปใช้นโยบายนี้ การเปลี่ยนมีผลทุกโฟลว์ใน Run และไม่ขอสิทธิ์จับภาพ"},"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":"ปักหมุดเฟรมจับภาพหน้าจอจริงถัดไปและใช้ซ้ำจนกว่าจะเรียก ScreenCapture.cache_off() หากยังไม่มีบัฟเฟอร์ใหม่ในคิว ระบบจะปักหมุดเฟรมล่าสุดที่ใช้ได้จากตัวอ่านภาพปัจจุบันแทน โดยไม่ขอสิทธิ์จับภาพหน้าจอเพิ่มเติม","behavior":"ปักหมุดเฟรมจับภาพหน้าจอจริงถัดไปและใช้ซ้ำจนกว่าจะเรียก ScreenCapture.cache_off() หากยังไม่มีบัฟเฟอร์ใหม่ในคิว ระบบจะปักหมุดเฟรมล่าสุดที่ใช้ได้จากตัวอ่านภาพปัจจุบันแทน โดยไม่ขอสิทธิ์จับภาพหน้าจอเพิ่มเติม","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"การควบคุมแคชอัปเดตนโยบายร่วมโดยไม่รอเฟรมหรือครบระยะเวลาที่ตั้ง การจับภาพถัดไปใช้นโยบายนี้ การเปลี่ยนมีผลทุกโฟลว์ใน Run และไม่ขอสิทธิ์จับภาพ"},"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":"เลิกปักหมุดเฟรมจับภาพหน้าจอโดยไม่เปลี่ยนการตั้งค่าแคชอัตโนมัติ หากเปิดแคชอัตโนมัติอยู่ ยังสามารถใช้เฟรมล่าสุดซ้ำได้ เมื่อต้องการเฟรมล่าสุดที่มีสำหรับการตรวจจับ ให้เรียก auto_cache_off() เพิ่มด้วย","behavior":"เลิกปักหมุดเฟรมจับภาพหน้าจอโดยไม่เปลี่ยนการตั้งค่าแคชอัตโนมัติ หากเปิดแคชอัตโนมัติอยู่ ยังสามารถใช้เฟรมล่าสุดซ้ำได้ เมื่อต้องการเฟรมล่าสุดที่มีสำหรับการตรวจจับ ให้เรียก auto_cache_off() เพิ่มด้วย","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"การควบคุมแคชอัปเดตนโยบายร่วมโดยไม่รอเฟรมหรือครบระยะเวลาที่ตั้ง การจับภาพถัดไปใช้นโยบายนี้ การเปลี่ยนมีผลทุกโฟลว์ใน Run และไม่ขอสิทธิ์จับภาพ"},"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":"ปิดการใช้เฟรมซ้ำโดยตั้งใจจากแคชอัตโนมัติเป็นเวลา duration_ms มิลลิวินาทีนับจากการเรียกนี้ หากละไว้หรือระบุ None จะปิดจนกว่าจะเรียก auto_cache_on() หรือจบการรันมาโคร การเรียกซ้ำจะแทนที่ระยะเวลาเดิม มีผลต่อการจับภาพร่วมกันแบบ bitmap, เฟรมดิบ, TFLite และพิกเซล ข้ามการใช้เฟรมซ้ำตาม TTL แต่การรับเฟรมยังมีเวลาจำกัด และไม่สามารถบังคับให้ Android วาดพิกเซลใหม่ได้ ไม่เลิกปักหมุดจาก cache_on() ไม่ขอสิทธิ์จับภาพ และไม่รอจนหมดเวลาที่กำหนด","behavior":"ปิดการใช้เฟรมซ้ำโดยตั้งใจจากแคชอัตโนมัติเป็นเวลา duration_ms มิลลิวินาทีนับจากการเรียกนี้ หากละไว้หรือระบุ None จะปิดจนกว่าจะเรียก auto_cache_on() หรือจบการรันมาโคร การเรียกซ้ำจะแทนที่ระยะเวลาเดิม มีผลต่อการจับภาพร่วมกันแบบ bitmap, เฟรมดิบ, TFLite และพิกเซล ข้ามการใช้เฟรมซ้ำตาม TTL แต่การรับเฟรมยังมีเวลาจำกัด และไม่สามารถบังคับให้ Android วาดพิกเซลใหม่ได้ ไม่เลิกปักหมุดจาก cache_on() ไม่ขอสิทธิ์จับภาพ และไม่รอจนหมดเวลาที่กำหนด","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"การควบคุมแคชอัปเดตนโยบายร่วมโดยไม่รอเฟรมหรือครบระยะเวลาที่ตั้ง การจับภาพถัดไปใช้นโยบายนี้ การเปลี่ยนมีผลทุกโฟลว์ใน Run และไม่ขอสิทธิ์จับภาพ"},"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 เพื่อไม่จำกัดเวลาภายในการรันมาโครนี้ ไม่รับค่า 0 ค่าลบ ค่าที่มีเศษส่วน สตริง บูลีน หรือค่าที่เกินขอบเขต","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":"การควบคุมแคชอัปเดตนโยบายร่วมโดยไม่รอเฟรมหรือครบระยะเวลาที่ตั้ง การจับภาพถัดไปใช้นโยบายนี้ การเปลี่ยนมีผลทุกโฟลว์ใน Run และไม่ขอสิทธิ์จับภาพ"},"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 คีย์/ค่าแบบถาวรสำหรับมาโครปัจจุบัน ตัวแปรปกติใช้ร่วมกันเฉพาะระหว่าง action PYTHON_CODE ที่ทำงานตามลำดับภายใน flow เดียว รวมถึง action ใน GROUP ส่วน flow ที่ทำงานพร้อมกันจะแยกตัวแปรออกจากกัน คีย์ Storage ใช้ร่วมกันในทุก flow จึงควรใช้เมื่อค่าต้องคงอยู่ถึงการรันมาโครครั้งถัดไป ไม่ใช่เป็นช่องส่งข้อความระหว่างโปรเซส การเขียนจะถูกบันทึกอัตโนมัติหลังไม่มีการเขียนใหม่ 2 วินาที และ commit อีกครั้งเมื่อ Run ทั้งหมดและ flow เบื้องหลังทั้งหมดสิ้นสุด","behavior":"Storage คีย์/ค่าแบบถาวรสำหรับมาโครปัจจุบัน ตัวแปรปกติใช้ร่วมกันเฉพาะระหว่าง action PYTHON_CODE ที่ทำงานตามลำดับภายใน flow เดียว รวมถึง action ใน GROUP ส่วน flow ที่ทำงานพร้อมกันจะแยกตัวแปรออกจากกัน คีย์ Storage ใช้ร่วมกันในทุก flow จึงควรใช้เมื่อค่าต้องคงอยู่ถึงการรันมาโครครั้งถัดไป ไม่ใช่เป็นช่องส่งข้อความระหว่างโปรเซส การเขียนจะถูกบันทึกอัตโนมัติหลังไม่มีการเขียนใหม่ 2 วินาที และ commit อีกครั้งเมื่อ Run ทั้งหมดและ flow เบื้องหลังทั้งหมดสิ้นสุด","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"โฟลว์ใน Run เดียวกันใช้เซสชัน 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":"โฟลว์ใน Run เดียวกันใช้เซสชัน 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":"เขียนหรือแทนที่หนึ่งรายการในที่เก็บข้อมูลถาวร ค่าที่รองรับจะเก็บประเภทที่เหมาะกับสคริปต์ เช่น ตัวเลข สตริง บูลีน จุด ภูมิภาค รายการ ทูเพิล dict ชุด และไม่มี รวมถึงค่าคอลเลกชันที่ซ้อนกัน","behavior":"เขียนหรือแทนที่หนึ่งรายการในที่เก็บข้อมูลถาวร ค่าที่รองรับจะเก็บประเภทที่เหมาะกับสคริปต์ เช่น ตัวเลข สตริง บูลีน จุด ภูมิภาค รายการ ทูเพิล dict ชุด และไม่มี รวมถึงค่าคอลเลกชันที่ซ้อนกัน","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"โฟลว์ใน Run เดียวกันใช้เซสชัน 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 วินาที และ commit อีกครั้งเมื่อ Run ทั้งหมดและ flow เบื้องหลังทั้งหมดสิ้นสุด","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":"โฟลว์ใน Run เดียวกันใช้เซสชัน 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":"โฟลว์ใน Run เดียวกันใช้เซสชัน 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":"โฟลว์ใน Run เดียวกันใช้เซสชัน 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":"โฟลว์ใน Run เดียวกันใช้เซสชัน 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":"โฟลว์ใน Run เดียวกันใช้เซสชัน 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":"คืนค่า Storage ปัจจุบันเป็น live dict ที่ทุก flow ใน Run นี้ใช้ร่วมกัน การแก้ไขรายการใน dict ที่ส่งคืนโดยตรงจะเข้าสู่กระบวนการบันทึกอัตโนมัติ และ snapshot live ล่าสุดจะถูก commit เมื่อ Run ทั้งหมดและ flow เบื้องหลังทั้งหมดสิ้นสุด","behavior":"คืนค่า Storage ปัจจุบันเป็น live dict ที่ทุก flow ใน Run นี้ใช้ร่วมกัน การแก้ไขรายการใน dict ที่ส่งคืนโดยตรงจะเข้าสู่กระบวนการบันทึกอัตโนมัติ และ snapshot live ล่าสุดจะถูก commit เมื่อ Run ทั้งหมดและ flow เบื้องหลังทั้งหมดสิ้นสุด","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"โฟลว์ใน Run เดียวกันใช้เซสชัน Storage ร่วมกัน แต่ละการทำงานและการแก้ไขซ้อนที่ติดตามมีล็อกป้องกัน การ get แล้ว set ไม่ใช่ธุรกรรมอะตอมมิก ให้มีผู้เขียนเพียงโฟลว์เดียวเมื่อการอัปเดตขึ้นกับค่าที่อ่านก่อนหน้า"},"limitations":[],"relatedApis":["class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"มุมมอง dict แบบสดของรายการที่เก็บข้อมูลที่มีอยู่ในปัจจุบัน","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":"คลิกที่ Point, tuple (x, y), Match หรือ MatchList ทุกพารามิเตอร์รองรับรูปแบบตามตำแหน่งหรือระบุชื่อตามลำดับในเอกสาร ใช้ Point(x, y) สำหรับ metadata ของพิกัด เช่น scale/anchor; ใช้ (x, y) สำหรับพิกัดพิกเซลคงที่ ใช้ parallel=True เพื่อเข้าคิวการแตะนี้และรับ id แบบตัวเลข; เรียก Touch.cancel(id) หรือ Touch.cancel() เพื่อยกเลิก touch ที่อยู่ในคิวหรือกำลังทำงาน","behavior":"คลิกที่ Point, tuple (x, y), Match หรือ MatchList ทุกพารามิเตอร์รองรับรูปแบบตามตำแหน่งหรือระบุชื่อตามลำดับในเอกสาร ใช้ Point(x, y) สำหรับ metadata ของพิกัด เช่น scale/anchor; ใช้ (x, y) สำหรับพิกัดพิกเซลคงที่ ใช้ parallel=True เพื่อเข้าคิวการแตะนี้และรับ id แบบตัวเลข; เรียก Touch.cancel(id) หรือ Touch.cancel() เพื่อยกเลิก touch ที่อยู่ในคิวหรือกำลังทำงาน","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"ท่าทาง Android ใช้อุปกรณ์ร่วมกัน parallel=True จัดคิว id การสัมผัส แต่ delay_before และ delay_after ยังทำให้รอนอกโหมด collect ในโหมด collect จะรวบรวมการสัมผัสเพื่อ Touch.send(); Touch.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":"Target Point, coordinate tuple, found Match, or MatchList. Match/MatchList values with multiple points click each found point.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"hold_ms","type":"Int","defaultValue":"0","description":"Hold duration in milliseconds","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"offset","type":"tuple[Number, Number]","defaultValue":"(0, 0)","description":"Add a pixel offset after resolving the target point.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"random","type":"Number | tuple[Number, Number]","defaultValue":"0","description":"Add random pixel offset after resolving the target point.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"delay_before","type":"Number","defaultValue":"0","description":"Delay before the click in milliseconds.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"delay_after","type":"Number","defaultValue":"0","description":"Delay after the click in milliseconds.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"parallel","type":"Boolean","defaultValue":"False","description":"When True, returns a numeric touch id. In collect mode the touch waits for Touch.send(); collected overlapping touches may start at different delay_before offsets without cancelling each other.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Number | list[Number] | None","returnDescription":"ส่งคืนรหัสตัวเลขหนึ่งรายการสำหรับการคลิกคู่ขนานที่อยู่ในคิวหนึ่งครั้ง รายการ [หมายเลข] เมื่อการจับคู่แบบหลายจุดหรือ MatchList จัดคิวการคลิกคู่ขนานหลายครั้ง มิฉะนั้น ไม่มี","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":"Perform a swipe gesture from a flat list of SwipePoint values. Each list creates one multi-point path for one finger.","behavior":"Perform a swipe gesture from a flat list of SwipePoint values. Each list creates one multi-point path for one finger.","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"ท่าทาง Android ใช้อุปกรณ์ร่วมกัน parallel=True จัดคิว id การสัมผัส แต่ delay_before และ delay_after ยังทำให้รอนอกโหมด collect ในโหมด collect จะรวบรวมการสัมผัสเพื่อ Touch.send(); Touch.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":"When True, returns a numeric touch id. In collect mode the swipe waits for Touch.send(); otherwise it queues immediately. Use Touch.cancel(id) or Touch.cancel() to cancel queued/active touches.","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":"Pause script execution for a given number of milliseconds.","behavior":"Pause script execution for a given number of milliseconds.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"รอในโฟลว์ผู้เรียกจนถึงเวลาที่กำหนดหรือการสัมผัสเสร็จ โฟลว์อื่นทำต่อได้ pause และ stop ยังมีผล"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"ms","type":"Int","defaultValue":null,"description":"Pause duration in milliseconds","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":"ป้อนข้อความ focus_index=0 คงโฟกัสปัจจุบันไว้, 1 โฟกัสไปที่ EditText ก่อน, 2 เน้น EditText ที่สอง ฯลฯ","behavior":"ป้อนข้อความ focus_index=0 คงโฟกัสปัจจุบันไว้, 1 โฟกัสไปที่ EditText ก่อน, 2 เน้น EditText ที่สอง ฯลฯ","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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: keep current focus, N>=1: focus N-th EditText before input","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"ไม่มีค่าส่งคืน","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":"Step increment","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]\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":"ส่งคืนรายการคู่ tuple(index, item) สำหรับค่าที่สามารถทำซ้ำได้","behavior":"ส่งคืนรายการคู่ tuple(index, item) สำหรับค่าที่สามารถทำซ้ำได้","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"การทำงานกับค่าทำในโฟลว์ที่เรียก โดยไม่ตั้งใจรอการจับภาพ ท่าทาง หรือข้อมูลจากผู้ใช้ สร้างคอนเทนเนอร์และบิลเดอร์ที่เปลี่ยนค่าได้แยกในแต่ละโฟลว์ การแยกนี้ไม่รับประกันการซิงโครไนซ์ออบเจ็กต์ที่แชร์"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"String | list | tuple | dict","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":"list[tuple]","returnDescription":"รายการสิ่งอันดับสองรายการ: จัดทำดัชนีก่อน รายการต้นฉบับที่สอง","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)","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":"String | list | tuple | dict","defaultValue":null,"description":"Values to combine. Dictionaries contribute keys.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"}],"returnType":"list[tuple]","returnDescription":"รายการสิ่งอันดับซึ่งแต่ละสิ่งอันดับมีหนึ่งรายการจากแต่ละอินพุต","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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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-int","kind":"FUNCTION","parentKey":null,"name":"int","signature":"int(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 | Boolean | String","defaultValue":null,"description":"Value to cast","suggestAsNamedArg":false,"requirement":"required","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, /)","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 | Boolean | String","defaultValue":null,"description":"Value to cast","suggestAsNamedArg":false,"requirement":"required","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":"Convert value to string using DSL display format. Point/Region stay compact, two-dimensional lists render as one row list per line, and only rows that are too long or complex expand into vertical multi-line text. Large or deeply nested structured values use a bounded preview with explicit omitted/budget markers; a direct string value remains unchanged.","behavior":"Convert value to string using DSL display format. Point/Region stay compact, two-dimensional lists render as one row list per line, and only rows that are too long or complex expand into vertical multi-line text. Large or deeply nested structured values use a bounded preview with explicit omitted/budget markers; a direct string value remains unchanged.","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","suggestAsNamedArg":false,"requirement":"required","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-print","kind":"FUNCTION","parentKey":null,"name":"print","signature":"print(*values, sep=\" \", end=\"\\n\")","description":"Write values to the overlay script console without blocking execution. Structured values use the same bounded display formatter as str(value), including row-based pretty output for two-dimensional lists, multi-line output for complex nesting, and explicit markers when content is omitted.","behavior":"Write values to the overlay script console without blocking execution. Structured values use the same bounded display formatter as str(value), including row-based pretty output for two-dimensional lists, multi-line output for complex nesting, and explicit markers when content is omitted.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์"},"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, /)","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","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":"เท็จสำหรับไม่มี/0/ว่างเปล่า; จริงเป็นอย่างอื่น","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":"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":"คืนค่าผลรวมของตัวเลขใน iterable โดยเลือกกำหนดค่าเริ่มต้น start ได้ สามารถละวงเล็บของ generator expression ได้เฉพาะเมื่อเป็นอาร์กิวเมนต์เดียวในการเรียกฟังก์ชันหรือเมธอด หากมีอาร์กิวเมนต์อื่นหรือเครื่องหมายจุลภาคท้ายรายการ ต้องใส่วงเล็บครอบ generator","behavior":"คืนค่าผลรวมของตัวเลขใน iterable โดยเลือกกำหนดค่าเริ่มต้น start ได้ สามารถละวงเล็บของ generator expression ได้เฉพาะเมื่อเป็นอาร์กิวเมนต์เดียวในการเรียกฟังก์ชันหรือเมธอด หากมีอาร์กิวเมนต์อื่นหรือเครื่องหมายจุลภาคท้ายรายการ ต้องใส่วงเล็บครอบ 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":"list | tuple | set | generator","defaultValue":null,"description":"Iterable containing numeric values.","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":"การทำงานประมวลผลค่าในโฟลว์ผู้เรียก callable ของ key ก็ทำในนั้นและอาจรอหรือมีผลข้างเคียง ไม่ได้หมายถึงการทำงานแบบอะซิงโครนัส"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"String | list | tuple | dict","defaultValue":null,"description":"Single iterable input. Dictionaries compare keys.","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":"One-argument callable used to compute comparison keys.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"Any","returnDescription":"รายการที่เล็กที่สุดดั้งเดิม หรือค่าเริ่มต้นเมื่อมีการระบุค่า iterable ว่างพร้อมกับ 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":"การทำงานประมวลผลค่าในโฟลว์ผู้เรียก callable ของ key ก็ทำในนั้นและอาจรอหรือมีผลข้างเคียง ไม่ได้หมายถึงการทำงานแบบอะซิงโครนัส"},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"String | list | tuple | dict","defaultValue":null,"description":"Single iterable input. Dictionaries compare keys.","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":"One-argument callable used to compute comparison keys.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"Any","returnDescription":"รายการที่ใหญ่ที่สุดดั้งเดิมหรือค่าเริ่มต้นเมื่อมีการระบุการวนซ้ำที่ว่างเปล่าพร้อมกับ 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":"ส่งคืนรายการใหม่ที่มีรายการทั้งหมดจาก iterable ตามลำดับที่จัดเรียง คีย์สามารถคำนวณคีย์เปรียบเทียบ Reverse=True เรียงลำดับจากมากไปหาน้อยโดยยังคงรักษารายการที่มีคีย์เท่ากันให้คงที่","behavior":"ส่งคืนรายการใหม่ที่มีรายการทั้งหมดจาก iterable ตามลำดับที่จัดเรียง คีย์สามารถคำนวณคีย์เปรียบเทียบ Reverse=True เรียงลำดับจากมากไปหาน้อยโดยยังคงรักษารายการที่มีคีย์เท่ากันให้คงที่","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"การทำงานประมวลผลค่าในโฟลว์ผู้เรียก callable ของ 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":"Iterable input. Dictionaries sort keys.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"key","type":"Callable?","defaultValue":"None","description":"One-argument callable used to compute comparison keys.","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(value, digits=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":"value","type":"Int | Float","defaultValue":null,"description":"Input number","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"digits","type":"Int","defaultValue":"0","description":"Decimal digits to keep","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"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":"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":"Float","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":"Float","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":"ค่าแคลมป์เป็นค่าต่ำสุด -> ช่วงสูงสุด","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","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"}]}}