ksaa 2025.5.23.3__py3-none-any.whl → 2025.6.8.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. kotonebot/backend/bot.py +3 -3
  2. kotonebot/backend/context/context.py +21 -11
  3. kotonebot/backend/debug/server.py +3 -3
  4. kotonebot/backend/flow_controller.py +195 -0
  5. kotonebot/client/implements/windows.py +18 -13
  6. kotonebot/kaa/common.py +21 -0
  7. kotonebot/kaa/main/gr.py +156 -26
  8. kotonebot/kaa/metadata.py +12 -0
  9. kotonebot/kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
  10. kotonebot/kaa/resources/game.db +0 -0
  11. kotonebot/kaa/resources/game_ver.txt +0 -0
  12. kotonebot/kaa/tasks/R.py +133 -133
  13. kotonebot/kaa/tasks/end_game.py +14 -0
  14. kotonebot/kaa/tasks/produce/common.py +1 -0
  15. kotonebot/kaa/tasks/produce/non_lesson_actions.py +1 -1
  16. kotonebot/kaa/tasks/start_game.py +49 -1
  17. {ksaa-2025.5.23.3.dist-info → ksaa-2025.6.8.0.dist-info}/METADATA +38 -1
  18. {ksaa-2025.5.23.3.dist-info → ksaa-2025.6.8.0.dist-info}/RECORD +155 -153
  19. ksaa-2025.6.8.0.dist-info/licenses/LICENSE +674 -0
  20. /kotonebot/kaa/sprites/{d364470a-d077-405f-a242-0d4fad32bc40.png → 02e0aa0d-4094-4bdc-8625-1a063733615b.png} +0 -0
  21. /kotonebot/kaa/sprites/{b3f1b38f-77d0-4dd5-8c19-8a35bbc39516.png → 03458cf9-8ab0-4908-9a56-9c5c7e06bc9b.png} +0 -0
  22. /kotonebot/kaa/sprites/{7079f76b-e2a3-487c-8616-28ce505f5a0e.png → 0439399f-5fca-43f9-a105-99342ff04d2e.png} +0 -0
  23. /kotonebot/kaa/sprites/{52e2b832-7837-47ca-a089-1f1593a99b08.png → 05bfd235-2077-479a-8c43-11fb49316000.png} +0 -0
  24. /kotonebot/kaa/sprites/{c30d08f7-5c07-487a-86c3-122c082bb07b.png → 05f8f996-a38a-45d9-8ff9-720b6c4fd599.png} +0 -0
  25. /kotonebot/kaa/sprites/{9a72b63e-8bd1-47dc-8298-cdf02220201e.png → 05ff5efd-0f76-47ce-bc89-237266bc17c0.png} +0 -0
  26. /kotonebot/kaa/sprites/{172318e0-5e7b-4b61-9a17-6e2e66b27e69.png → 09433024-3dfe-4fcb-9d67-cf442b58f31b.png} +0 -0
  27. /kotonebot/kaa/sprites/{7dd31493-9f3b-4382-a43a-f8eb1c745ad8.png → 0a430873-8c12-4ce2-a5de-ab9790c08344.png} +0 -0
  28. /kotonebot/kaa/sprites/{9f6aef36-f2e5-4208-9748-b6bbdb5546fd.png → 0bab7080-9a37-4c27-9821-8df36d49b678.png} +0 -0
  29. /kotonebot/kaa/sprites/{cc0ac4cf-01fd-48f9-8707-2d6a2aa0ba8c.png → 0bbfb5b0-f0f7-4ad9-86f7-a2adb01a6371.png} +0 -0
  30. /kotonebot/kaa/sprites/{a2ea2e0f-4f92-4769-9bc4-1ee10c43712c.png → 0decaa6a-b9a9-4d9b-829a-0fc1f67538b4.png} +0 -0
  31. /kotonebot/kaa/sprites/{6dcc0bb3-984f-4c92-b0a3-74281d684182.png → 111a03e6-e401-4ad5-b5dc-d5124e8f1ab0.png} +0 -0
  32. /kotonebot/kaa/sprites/{e6e66cdf-69c8-4862-a770-1f81c62f96ac.png → 12e8d3f1-494a-46f5-908f-f621a0c57ec6.png} +0 -0
  33. /kotonebot/kaa/sprites/{5eddc669-dff6-462c-a495-81ddf951429e.png → 13535ecd-bdf5-4ff7-aa2c-6ecb20fe9c06.png} +0 -0
  34. /kotonebot/kaa/sprites/{7d4f53fb-02bc-4139-b32c-3345a5f92a79.png → 157dd58d-e319-4e0c-a37a-638e1a31c60b.png} +0 -0
  35. /kotonebot/kaa/sprites/{3720275d-cbf7-4513-a4a4-09f712b2286a.png → 1a3d18a4-7d91-4182-9e40-e60d73fed365.png} +0 -0
  36. /kotonebot/kaa/sprites/{c287899b-b9a3-4ee2-a8fd-ebda89099b4b.png → 1bfce48a-b151-406e-a6f5-863cb68cbbf2.png} +0 -0
  37. /kotonebot/kaa/sprites/{237636f2-aec0-40be-b7bb-e08607a89307.png → 1f8f8c46-43ec-4449-be9f-2e96da11da1e.png} +0 -0
  38. /kotonebot/kaa/sprites/{ef539419-d100-43d5-83a1-14e65b85d816.png → 1f9165e6-77ee-403e-9b76-99c114527dbb.png} +0 -0
  39. /kotonebot/kaa/sprites/{76c07ba7-afea-405c-806a-7691ce73f83a.png → 22d5a7d5-59a0-4137-b02e-1a7af86d4250.png} +0 -0
  40. /kotonebot/kaa/sprites/{23217053-c549-4ac7-b8c0-3324728e6acd.png → 22ee3f1b-ddcb-48bf-85dd-8423f85e3199.png} +0 -0
  41. /kotonebot/kaa/sprites/{fe031296-8000-4fdc-ab3f-b4aae2af6e5d.png → 24cd42fd-bb3b-4fc6-b40d-d3e3e36fe9f1.png} +0 -0
  42. /kotonebot/kaa/sprites/{7250e776-3195-406c-ac6f-ec7dbed49cbe.png → 2f81e70a-f2af-420f-9b6b-6338c391911f.png} +0 -0
  43. /kotonebot/kaa/sprites/{474ce25b-8a3d-435e-8d7a-ab6566ae61a0.png → 309105d4-073a-47c9-8c5c-d593aa497723.png} +0 -0
  44. /kotonebot/kaa/sprites/{7d968a7f-f4a8-40a0-b9bf-e73ec1f2d7b5.png → 31a52dc8-b7fb-4ff6-a261-eb90a918603c.png} +0 -0
  45. /kotonebot/kaa/sprites/{f6d36222-847e-4300-8f90-c98c7a8f36e3.png → 321b54c8-c69b-4437-931d-655882dabeed.png} +0 -0
  46. /kotonebot/kaa/sprites/{bbfcc1ea-b441-4e81-85d2-52ce3bf4eb62.png → 333fe6d3-0be7-40fb-a2a3-364f98758f2a.png} +0 -0
  47. /kotonebot/kaa/sprites/{c072da5f-bd35-4e8b-8f32-6c5df18c3aea.png → 371a3192-101c-45ef-9da4-2ed389770c0f.png} +0 -0
  48. /kotonebot/kaa/sprites/{b260d390-2b1a-4974-92db-d68ff7b5b8e6.png → 38b8f119-8de1-49bf-8a5f-a44371de4569.png} +0 -0
  49. /kotonebot/kaa/sprites/{19fae7eb-addd-4ea2-99ac-0f9262a4d9d6.png → 43d65b3f-bbae-4e29-a7bf-539379c1b072.png} +0 -0
  50. /kotonebot/kaa/sprites/{22ab93e6-0192-48e1-a85f-73ee8db00395.png → 469006bc-a011-46e4-bcde-992be888456e.png} +0 -0
  51. /kotonebot/kaa/sprites/{608de0a3-ce93-4344-8f9b-3cb3fab5ad12.png → 48c257f8-3583-49f7-b01a-ba7d251086ac.png} +0 -0
  52. /kotonebot/kaa/sprites/{8383a31c-a075-4b5f-b839-cbeb63a7aef3.png → 48d2f007-8c1b-43fc-bd3f-f0b10d2a0c88.png} +0 -0
  53. /kotonebot/kaa/sprites/{dc17dea0-7749-4ecb-bbc0-1a52fb992dcf.png → 4a235eaa-46f1-4f71-b54d-ada0ade44572.png} +0 -0
  54. /kotonebot/kaa/sprites/{b99f0684-8200-4080-9b54-808c4ec12c99.png → 4bd66b38-78d3-4a27-816b-d315039a8bb6.png} +0 -0
  55. /kotonebot/kaa/sprites/{26433c9e-0ea2-4da4-9207-8f3fbad04235.png → 4c72f39e-1182-4479-867f-8207744ee4fd.png} +0 -0
  56. /kotonebot/kaa/sprites/{48a02c33-b7af-4ab5-bda1-3a2ec62a7076.png → 4d6c198a-0e34-4c80-86d1-7789b2082d64.png} +0 -0
  57. /kotonebot/kaa/sprites/{b5009ffd-7e53-41ae-b78d-918ba0e7eda4.png → 4e21f02d-d5e1-49eb-946a-8edc74d0f1f7.png} +0 -0
  58. /kotonebot/kaa/sprites/{5e74dc61-0ad5-4e57-b331-e3d2ed67b6d2.png → 4f58031c-36b9-4baf-bccf-11c05d83bd19.png} +0 -0
  59. /kotonebot/kaa/sprites/{415c45a8-9b71-4e0b-8cd2-f80a0a4aafb7.png → 52620946-b92c-42c7-9fcc-0ff13388fd0d.png} +0 -0
  60. /kotonebot/kaa/sprites/{a1610e9f-93f0-4ef2-b32a-b2effd1673e8.png → 54bb5fcf-be61-4af8-bb19-a3c5113cf9e1.png} +0 -0
  61. /kotonebot/kaa/sprites/{0d1918db-e000-4452-8490-ace623127e76.png → 550fc45d-22c0-4a7c-a324-2c4ff107ab39.png} +0 -0
  62. /kotonebot/kaa/sprites/{bdb09790-f702-4af2-ab67-0b3f05fd93ca.png → 559df9b9-e74d-45af-a300-77d3424e69c6.png} +0 -0
  63. /kotonebot/kaa/sprites/{d3b97b8f-f13a-413d-a097-5c456b8aea0d.png → 56a8c0ca-4659-4de2-9bce-55ce86a40d75.png} +0 -0
  64. /kotonebot/kaa/sprites/{428f770b-e149-417e-bb8a-38c1cba024e1.png → 572077d4-7ee2-449a-b4f0-66239b0d7aff.png} +0 -0
  65. /kotonebot/kaa/sprites/{9d7a7bbb-b48b-458c-9964-963a57e10a7d.png → 5be4f6c7-2baa-42f3-a5a5-99ca0830cc30.png} +0 -0
  66. /kotonebot/kaa/sprites/{370afc82-eea9-4063-afb7-5d5fec075510.png → 5bf00cba-9aab-4ffe-b20b-8f5e74279276.png} +0 -0
  67. /kotonebot/kaa/sprites/{12356f5d-4188-4aa5-abb3-d219ca0167ca.png → 5ca50448-cc21-499a-a685-c5e1c4240c48.png} +0 -0
  68. /kotonebot/kaa/sprites/{9d908390-6f0f-46e6-a8fc-a7dfe23eda18.png → 5edef075-4843-4dc9-840f-ae445cbe0730.png} +0 -0
  69. /kotonebot/kaa/sprites/{51f38e84-56c8-4c80-9a67-35196ef54b89.png → 624555b9-31e3-46a3-8078-55619eaa40b9.png} +0 -0
  70. /kotonebot/kaa/sprites/{14cc953d-0ff6-493f-9478-691b5cbd0d07.png → 645744c4-3bbf-4ea2-8f46-4725fff874b3.png} +0 -0
  71. /kotonebot/kaa/sprites/{08c2352f-0150-453a-aa0e-948dd0deef49.png → 668002b6-805b-467b-a703-203fb75444f4.png} +0 -0
  72. /kotonebot/kaa/sprites/{157cfa99-d40c-48c2-8cf4-70835535522f.png → 67a81c23-4ce4-45e3-bfa8-1136fb14b831.png} +0 -0
  73. /kotonebot/kaa/sprites/{276a66cc-95b1-4f86-b700-afa9c9f18149.png → 695f8d57-b2c9-4a6d-9ae9-1b49ee3eb22a.png} +0 -0
  74. /kotonebot/kaa/sprites/{1df6ff4b-17f8-4ee6-8df0-0b53e26b7f1e.png → 6a7d061e-682b-42c1-97d5-121c52921e8b.png} +0 -0
  75. /kotonebot/kaa/sprites/{b4afb6bd-e049-4b2e-b1ca-26333c7afcb0.png → 6bf5556a-8f4e-41d7-8ab5-d683ad1b47a8.png} +0 -0
  76. /kotonebot/kaa/sprites/{56a70bc5-bd16-493b-b5b6-770f42f13de5.png → 705d9ecf-faf8-40f4-b701-637cec822c1e.png} +0 -0
  77. /kotonebot/kaa/sprites/{e55da40e-5fb5-48e0-91b1-2db0b3b32750.png → 72c1804f-db8c-40fa-bc79-6533f2861a5d.png} +0 -0
  78. /kotonebot/kaa/sprites/{6e338dd7-6834-4e9b-8ac1-afecdff16c43.png → 7344e180-251b-465a-a8cf-974477f7ad44.png} +0 -0
  79. /kotonebot/kaa/sprites/{46ed11a3-f89e-4d5c-b534-da88d38b382b.png → 73af305f-840f-4325-abae-b3519fba672a.png} +0 -0
  80. /kotonebot/kaa/sprites/{7b46a3e5-18d3-45a0-9500-1d7c854a12bb.png → 73f4204e-8281-47cc-9dce-6bb8280c4ce5.png} +0 -0
  81. /kotonebot/kaa/sprites/{382bc600-72f6-433f-809e-9fe2fdb31b32.png → 74521b6f-de5e-4ba8-a3c9-c6ba01070498.png} +0 -0
  82. /kotonebot/kaa/sprites/{8cc764de-f162-40a4-ba6f-40d60eac5633.png → 7736a171-9221-4cda-8288-908997abeff2.png} +0 -0
  83. /kotonebot/kaa/sprites/{55d105dc-c488-47d8-9b95-aba5707cfc2a.png → 79bc56c5-eae6-4389-9116-4a9e182d6bf3.png} +0 -0
  84. /kotonebot/kaa/sprites/{e3cfea3a-3dc4-412b-b226-f9034f5b51f1.png → 7a479871-547e-4098-9cdd-6c9bb9f7449a.png} +0 -0
  85. /kotonebot/kaa/sprites/{6d39d7a2-0b1f-4f49-9ab8-062bca9b5470.png → 7b3c6860-fbbe-48aa-aadf-8062fa88f1fe.png} +0 -0
  86. /kotonebot/kaa/sprites/{f400e1fe-a04d-442b-a6de-a448813443fd.png → 7cea265a-fca5-43d0-b2da-067c8fff4d72.png} +0 -0
  87. /kotonebot/kaa/sprites/{d2732870-dd6b-4b7b-b21e-4ff2a4958b32.png → 7e8164f6-a9e4-4600-b776-77b35a490933.png} +0 -0
  88. /kotonebot/kaa/sprites/{e5922ce7-9aa7-4806-acdd-9c35408a0f37.png → 804a4b05-1ca3-4915-bf23-a66ccdc34404.png} +0 -0
  89. /kotonebot/kaa/sprites/{e508161a-e595-4daf-a364-625aaf67e481.png → 80fb515c-4323-422d-a24c-80a3bf702f1d.png} +0 -0
  90. /kotonebot/kaa/sprites/{685a7a90-8196-4a6a-a67a-4e7078965982.png → 826bf80a-112e-4356-9111-4b7e692ccc82.png} +0 -0
  91. /kotonebot/kaa/sprites/{3e10014e-2063-424c-aeda-df985d351c12.png → 82a5e224-a161-43d4-8e15-2946480336dd.png} +0 -0
  92. /kotonebot/kaa/sprites/{d0c085fa-3089-4adf-979c-d4b274b32c3b.png → 869b1771-b2ce-4872-ab75-2157c47c5b13.png} +0 -0
  93. /kotonebot/kaa/sprites/{cecd2638-070f-4710-9142-2dc492660241.png → 89c0e675-3fd4-456a-8ae7-3bfb248b7281.png} +0 -0
  94. /kotonebot/kaa/sprites/{99c36126-0173-49f3-a6b8-819bf9bd9306.png → 8e8a0b57-0231-4ed6-958e-3196f7c9ca7b.png} +0 -0
  95. /kotonebot/kaa/sprites/{8da0b45e-3d90-40f0-9781-c1ff4cd0e060.png → 90a9c819-ee6b-4b3e-a0e4-ce484c6e413d.png} +0 -0
  96. /kotonebot/kaa/sprites/{60e43a33-18ee-45f1-bd9a-57bb6539611b.png → 910d307b-6461-4950-badb-509975d0b797.png} +0 -0
  97. /kotonebot/kaa/sprites/{a1a03d83-6a3b-481a-a807-931f2b0f7cd2.png → 92b7d830-3db5-434e-b156-0ac855db480d.png} +0 -0
  98. /kotonebot/kaa/sprites/{86501f18-e5fd-4a66-a360-20e34935f1a9.png → 96cf0633-6531-499b-b1cc-6670ab710293.png} +0 -0
  99. /kotonebot/kaa/sprites/{74db3d1c-d6be-4d1f-92be-9bb3ffad7f51.png → 994aa6a6-0189-4a79-8125-56136973b581.png} +0 -0
  100. /kotonebot/kaa/sprites/{465d4e1a-c5f9-41b7-aa31-ce26d5c69c45.png → 9bb1a400-935a-4c5e-838b-fca502c49aba.png} +0 -0
  101. /kotonebot/kaa/sprites/{1e9e795c-5dc1-4851-8d49-86181b9f4efe.png → 9c1fa1d4-2ae5-4093-abaa-cebb51135721.png} +0 -0
  102. /kotonebot/kaa/sprites/{8e04cb5c-ce45-49d9-81a9-2e5f717d3eb2.png → a00fcf77-2800-4f7d-993d-4636b36045bb.png} +0 -0
  103. /kotonebot/kaa/sprites/{863550ee-e9b8-4aa2-8ebb-e906b09dde3b.png → a105d17d-d44c-4798-aeff-70808c91cb47.png} +0 -0
  104. /kotonebot/kaa/sprites/{eb229797-bffc-4a48-96de-85480af1608a.png → a33ae1c3-ac69-4783-977e-9f0f1b1a2f8d.png} +0 -0
  105. /kotonebot/kaa/sprites/{3851e552-fd41-4a15-a6b6-9636c773f67a.png → a3c12040-2b11-4038-b830-215fb7b6f359.png} +0 -0
  106. /kotonebot/kaa/sprites/{1d6d5160-9525-42bf-a8d4-43c347d213eb.png → a82e06fb-a02e-4be5-a7b4-4d2758914fcf.png} +0 -0
  107. /kotonebot/kaa/sprites/{f4a1201f-9305-4ec5-8962-2bef0144ab46.png → ad784a29-f0e2-4037-976b-45143db8441c.png} +0 -0
  108. /kotonebot/kaa/sprites/{4ddc656f-ef7e-4580-ad12-9e382ea76e4f.png → ad8ee599-88a8-429c-8982-99086e552dcc.png} +0 -0
  109. /kotonebot/kaa/sprites/{934e5383-b63c-472e-afdb-d184c92bdfe3.png → afa0f85f-dcb7-48a1-a1ae-624456b9b65c.png} +0 -0
  110. /kotonebot/kaa/sprites/{de0b3d75-7dc8-4433-a275-2584e9d7ed0b.png → b1d1dfab-51f5-4ae9-b718-cdf46774c0ff.png} +0 -0
  111. /kotonebot/kaa/sprites/{872c37e7-e596-4449-86f4-5ba65836a7a7.png → b1e88fda-434a-4d06-8891-883a7beafa12.png} +0 -0
  112. /kotonebot/kaa/sprites/{51b836ff-5f2c-4612-85f1-9db74761f300.png → b2f7a430-5777-4861-8435-5419394e5ee8.png} +0 -0
  113. /kotonebot/kaa/sprites/{4b121018-f5c8-4c31-a5d9-48947982b191.png → b3d1f8d4-1393-4206-b78e-a5495d8fb930.png} +0 -0
  114. /kotonebot/kaa/sprites/{cd53bad6-81fa-4e15-8fe7-5a992367bf90.png → b3e72de2-e103-49a3-b0f2-8593cff87c4e.png} +0 -0
  115. /kotonebot/kaa/sprites/{8778f70d-6bb8-4378-aed7-d77c798ab032.png → b44f5e5b-e999-4427-8a9f-f76c6485f4a5.png} +0 -0
  116. /kotonebot/kaa/sprites/{9b798f35-e745-4964-931d-3e0ae811174d.png → b604e25d-680a-4e02-a012-2e593b5bc276.png} +0 -0
  117. /kotonebot/kaa/sprites/{2ef87b7f-d69e-4da2-878f-1cc35e48b15c.png → ba955365-1328-4018-83a2-bfe818f8f172.png} +0 -0
  118. /kotonebot/kaa/sprites/{5a4a763f-b69b-4405-994d-470a78476f67.png → c0fc7de5-b842-4c70-9cf2-89d833bfe7a6.png} +0 -0
  119. /kotonebot/kaa/sprites/{4ffd7c97-86dd-4171-92e7-8e8e83e8f394.png → c1ad996a-925e-41b5-b26c-d48b8ded21d2.png} +0 -0
  120. /kotonebot/kaa/sprites/{e98037f8-3b4a-4de8-adc1-ca0f736b6c98.png → c1b1125f-542b-4e63-9c86-5d2e35a89a10.png} +0 -0
  121. /kotonebot/kaa/sprites/{593f4c04-4ca4-4bb0-8fea-ad3af32316f7.png → c2667677-cbff-4dd4-a401-e0963e7224f4.png} +0 -0
  122. /kotonebot/kaa/sprites/{ddb2e9ee-e16a-4745-8598-b3f9c2f011be.png → c4f28132-4aba-40ba-be6c-b1a31d014635.png} +0 -0
  123. /kotonebot/kaa/sprites/{ced345fa-b375-457d-8b72-802424512e6c.png → c7aa3f89-8a5e-4685-9297-4fc892bfdd81.png} +0 -0
  124. /kotonebot/kaa/sprites/{c94488b2-0ff0-4467-bbb0-405d3a2c55a3.png → cc829886-23e8-4d47-b4c4-37ca20381180.png} +0 -0
  125. /kotonebot/kaa/sprites/{34ec068a-d6fd-47ac-bd2f-0c31f93c19f3.png → cd4cbd7b-df80-45bb-a053-cc333a806934.png} +0 -0
  126. /kotonebot/kaa/sprites/{9e74a9e6-6ea5-4551-9578-8e561195bd3d.png → cd8d3d55-f102-419e-a6fd-2ad5ecc4fd2e.png} +0 -0
  127. /kotonebot/kaa/sprites/{86bcda3a-c7a6-4abf-ae4c-968788f3c667.png → d22ca9e0-001d-43d6-a557-1c76c5a27c81.png} +0 -0
  128. /kotonebot/kaa/sprites/{267fcd93-6a5c-4954-a06b-e97f327e9141.png → d58d9987-b1ca-4669-a9a6-9a0fd1847fa6.png} +0 -0
  129. /kotonebot/kaa/sprites/{37f421f8-f615-43d1-a10f-f9a915a940d1.png → d747239f-7620-4f23-9ac7-cf2d34889266.png} +0 -0
  130. /kotonebot/kaa/sprites/{63bfee9f-546e-4c3c-a82f-c2707bc62b90.png → d7f604a6-c663-44db-b1d3-c9792eb3daa4.png} +0 -0
  131. /kotonebot/kaa/sprites/{a69febc4-2d01-4628-be92-29b421604c4d.png → d8136469-6d73-4f82-a79c-fee83c3e93a8.png} +0 -0
  132. /kotonebot/kaa/sprites/{4b87be27-868a-40fb-b7e4-67c963c6c4b2.png → da3e7cee-d77b-4e62-b703-ed257706dd39.png} +0 -0
  133. /kotonebot/kaa/sprites/{37e3a757-bcbc-4a37-bbf9-a38162a8627e.png → db94ffb7-a09d-4a51-b420-b930851c9db4.png} +0 -0
  134. /kotonebot/kaa/sprites/{72b7124a-baf2-4d60-9553-2634370a6d49.png → de709296-e411-465f-86fc-5daf5ca83cef.png} +0 -0
  135. /kotonebot/kaa/sprites/{9ce49f31-6b3a-4bc7-a9c8-9330d6f650f7.png → e2fae2a4-bb19-4f49-b382-47e504ec26d3.png} +0 -0
  136. /kotonebot/kaa/sprites/{aad29ac0-b9ad-4c38-93f5-e8036ad7b96b.png → e41bb5df-164d-4760-9db6-d5d5d763bb5f.png} +0 -0
  137. /kotonebot/kaa/sprites/{09a01092-0d32-4894-a47e-9983b39753df.png → e5d15c50-45ee-4de9-8b97-4630cbd8f01a.png} +0 -0
  138. /kotonebot/kaa/sprites/{f3b4bb3b-f8d6-4ed0-8bde-0d3322bd8391.png → e7022542-4317-4a61-8098-f3f733d8400e.png} +0 -0
  139. /kotonebot/kaa/sprites/{a5d05106-5a60-414c-972d-a886664abde4.png → e866d8b1-4f61-45bf-8170-5229f53c047a.png} +0 -0
  140. /kotonebot/kaa/sprites/{7c65fc91-602b-4d1b-82f9-c9b561a55d9b.png → ecd44a4a-e1ca-4a86-ae0d-2306a672613f.png} +0 -0
  141. /kotonebot/kaa/sprites/{588f3405-4110-48dd-99ec-f89c004cf02e.png → ed5d2bf3-405c-4165-88d0-9f8a4be968c6.png} +0 -0
  142. /kotonebot/kaa/sprites/{a829f038-5421-4cc4-a494-105a973351e2.png → ef39804e-8d2d-40f6-8d13-bd2877d1353a.png} +0 -0
  143. /kotonebot/kaa/sprites/{263708c5-0177-4c6a-8df3-611ec314fa56.png → f0786a26-81b5-4e76-b577-db70ab3fab50.png} +0 -0
  144. /kotonebot/kaa/sprites/{aa8c4533-bd58-496e-a460-6fa47f7ded83.png → f65a4495-f044-44de-bf0d-c869e637d5d3.png} +0 -0
  145. /kotonebot/kaa/sprites/{465f1030-e538-4b22-a6f7-0087287b2e12.png → f74fc514-61f1-4068-bdf4-754fcaf8ac89.png} +0 -0
  146. /kotonebot/kaa/sprites/{7f0783fe-89d9-4405-b7a3-6334ba543826.png → f8cbb089-a63e-4e40-9238-26d14da2c459.png} +0 -0
  147. /kotonebot/kaa/sprites/{3a0e917b-f419-4398-8638-77f696d47cd4.png → f9b2f64d-f829-4b13-9704-c5f00fb956be.png} +0 -0
  148. /kotonebot/kaa/sprites/{c4fed66b-e195-4288-8b1f-ef4b0ef35174.png → fb927b92-7a82-4869-8c61-581d49cd7201.png} +0 -0
  149. /kotonebot/kaa/sprites/{e9e399f7-4e2f-4392-bb8f-850c4a272dfa.png → fbd816df-7ae6-40a4-b4d4-5708f5ba4a7c.png} +0 -0
  150. /kotonebot/kaa/sprites/{2e0f97d4-ce0b-4930-addd-cbdaedffc918.png → fd610de1-b023-4747-8c1b-72f89b1c5647.png} +0 -0
  151. /kotonebot/kaa/sprites/{e0a5c772-49d3-468a-bcf5-0e3f24365253.png → fdfecda8-2fe0-487e-b5fe-6358274bb9ff.png} +0 -0
  152. /kotonebot/kaa/sprites/{f4b226eb-ed9e-4e5e-9ba0-1b777e401aa3.png → ff77d221-8444-4d0f-8c93-0223a97e2a98.png} +0 -0
  153. {ksaa-2025.5.23.3.dist-info → ksaa-2025.6.8.0.dist-info}/WHEEL +0 -0
  154. {ksaa-2025.5.23.3.dist-info → ksaa-2025.6.8.0.dist-info}/entry_points.txt +0 -0
  155. {ksaa-2025.5.23.3.dist-info → ksaa-2025.6.8.0.dist-info}/top_level.txt +0 -0
kotonebot/kaa/main/gr.py CHANGED
@@ -15,6 +15,7 @@ from kotonebot.kaa.db import IdolCard
15
15
  from kotonebot.config.manager import load_config, save_config
16
16
  from kotonebot.config.base_config import UserConfig, BackendConfig
17
17
  from kotonebot.backend.context import task_registry, ContextStackVars
18
+ from kotonebot.backend.context.context import vars
18
19
  from kotonebot.client.host import Mumu12Host, LeidianHost
19
20
  from kotonebot.kaa.common import (
20
21
  BaseConfig, APShopItems, CapsuleToysConfig, ClubRewardConfig, PurchaseConfig, ActivityFundsConfig,
@@ -69,12 +70,14 @@ ConfigKey = Literal[
69
70
  'anomaly_capsule_toys_count',
70
71
 
71
72
  # start game
72
- 'start_game_enabled', 'start_through_kuyo',
73
+ 'start_game_enabled', 'start_through_kuyo',
73
74
  'game_package_name', 'kuyo_package_name',
74
-
75
+ 'disable_gakumas_localify', 'dmm_game_path',
76
+
75
77
  # end game
76
- 'exit_kaa', 'kill_game', 'kill_dmm',
78
+ 'exit_kaa', 'kill_game', 'kill_dmm',
77
79
  'kill_emulator', 'shutdown', 'hibernate',
80
+ 'restore_gakumas_localify',
78
81
 
79
82
  'activity_funds',
80
83
  'presents',
@@ -180,6 +183,8 @@ class KotoneBotUI:
180
183
  def __init__(self, kaa: Kaa) -> None:
181
184
  self.is_running: bool = False
182
185
  self.single_task_running: bool = False
186
+ self.is_stopping: bool = False # 新增:标记是否正在停止过程中
187
+ self.is_single_task_stopping: bool = False # 新增:标记单个任务是否正在停止
183
188
  self._kaa = kaa
184
189
  self._load_config()
185
190
  self._setup_kaa()
@@ -230,14 +235,20 @@ class KotoneBotUI:
230
235
 
231
236
  return f"已导出到 {zip_filename}"
232
237
 
233
- def get_button_status(self) -> str:
238
+ def get_button_status(self) -> Tuple[str, bool]:
239
+ """获取按钮状态和交互性"""
234
240
  if not hasattr(self, 'run_status'):
235
- return "启动"
241
+ return "启动", True
236
242
 
237
243
  if not self.run_status.running:
238
244
  self.is_running = False
239
- return "启动"
240
- return "停止"
245
+ self.is_stopping = False # 重置停止状态
246
+ return "启动", True
247
+
248
+ if self.is_stopping:
249
+ return "停止中...", False # 停止中时禁用按钮
250
+
251
+ return "停止", True
241
252
 
242
253
  def update_task_status(self) -> List[List[str]]:
243
254
  status_list: List[List[str]] = []
@@ -260,6 +271,11 @@ class KotoneBotUI:
260
271
  def toggle_run(self) -> Tuple[str, List[List[str]]]:
261
272
  if not self.is_running:
262
273
  return self.start_run()
274
+
275
+ # 如果正在停止过程中,忽略重复点击
276
+ if self.is_stopping:
277
+ return "停止中...", self.update_task_status()
278
+
263
279
  return self.stop_run()
264
280
 
265
281
  def start_run(self) -> Tuple[str, List[List[str]]]:
@@ -268,10 +284,19 @@ class KotoneBotUI:
268
284
  return "停止", self.update_task_status()
269
285
 
270
286
  def stop_run(self) -> Tuple[str, List[List[str]]]:
287
+ self.is_stopping = True # 设置停止状态
288
+
289
+ # 如果当前处于暂停状态,先恢复再停止
290
+ if vars.flow.is_paused:
291
+ gr.Info("检测到任务暂停,正在恢复后停止...")
292
+ vars.flow.request_resume()
293
+
271
294
  self.is_running = False
272
295
  if self._kaa:
273
296
  self.run_status.interrupt()
274
- return "启动", self.update_task_status()
297
+ gr.Info("正在停止任务...")
298
+
299
+ return "停止中...", self.update_task_status()
275
300
 
276
301
  def start_single_task(self, task_name: str) -> Tuple[str, str]:
277
302
  if not task_name:
@@ -292,11 +317,48 @@ class KotoneBotUI:
292
317
  return "停止任务", f"正在执行任务: {task_name}"
293
318
 
294
319
  def stop_single_task(self) -> Tuple[str, str]:
320
+ self.is_single_task_stopping = True # 设置单个任务停止状态
321
+
322
+ # 如果当前处于暂停状态,先恢复再停止
323
+ if vars.flow.is_paused:
324
+ gr.Info("检测到任务暂停,正在恢复后停止...")
325
+ vars.flow.request_resume()
326
+
295
327
  self.single_task_running = False
296
328
  if hasattr(self, 'run_status') and self._kaa:
297
329
  self.run_status.interrupt()
298
- gr.Info("任务已停止")
299
- return "执行任务", "任务已停止"
330
+ gr.Info("正在停止任务...")
331
+ return "停止中...", "正在停止任务..."
332
+
333
+ def toggle_pause(self) -> str:
334
+ """切换暂停/恢复状态"""
335
+ if vars.flow.is_paused:
336
+ vars.flow.request_resume()
337
+ gr.Info("任务已恢复")
338
+ return "暂停"
339
+ else:
340
+ vars.flow.request_pause()
341
+ gr.Info("任务已暂停")
342
+ return "恢复"
343
+
344
+ def get_pause_button_status(self) -> str:
345
+ """获取暂停按钮的状态"""
346
+ if vars.flow.is_paused:
347
+ return "恢复"
348
+ else:
349
+ return "暂停"
350
+
351
+ def get_pause_button_with_interactive(self) -> gr.Button:
352
+ """获取暂停按钮的状态和交互性"""
353
+ try:
354
+ text = "恢复" if vars.flow.is_paused else "暂停"
355
+ except ValueError:
356
+ # ValueError: Forwarded object vars called before initialization.
357
+ # TODO: vars.flow.is_paused 应该要可以在脚本正式启动前就能访问
358
+ text = '未启动'
359
+ # 如果正在停止过程中,禁用暂停按钮
360
+ interactive = not (self.is_stopping or self.is_single_task_stopping)
361
+ return gr.Button(value=text, interactive=interactive)
300
362
 
301
363
  def save_settings2(self, return_values: list[ConfigBuilderReturnValue], *args) -> str:
302
364
  options = BaseConfig()
@@ -326,7 +388,8 @@ class KotoneBotUI:
326
388
  gr.Markdown("## 状态")
327
389
 
328
390
  with gr.Row():
329
- run_btn = gr.Button("启动", scale=1)
391
+ run_btn = gr.Button("启动", scale=2)
392
+ pause_btn = gr.Button("暂停", scale=1)
330
393
  if self._kaa.upgrade_msg:
331
394
  gr.Markdown('### 配置升级报告')
332
395
  gr.Markdown(self._kaa.upgrade_msg)
@@ -338,19 +401,39 @@ class KotoneBotUI:
338
401
  label="任务状态"
339
402
  )
340
403
 
341
- def on_run_click(evt: gr.EventData) -> Tuple[str, List[List[str]]]:
342
- return self.toggle_run()
404
+ def on_run_click(evt: gr.EventData) -> Tuple[gr.Button, List[List[str]]]:
405
+ result = self.toggle_run()
406
+ # 如果正在停止,禁用按钮
407
+ interactive = not self.is_stopping
408
+ button = gr.Button(value=result[0], interactive=interactive)
409
+ return button, result[1]
410
+
411
+ def on_pause_click(evt: gr.EventData) -> str:
412
+ return self.toggle_pause()
343
413
 
344
414
  run_btn.click(
345
415
  fn=on_run_click,
346
416
  outputs=[run_btn, task_status]
347
417
  )
348
418
 
419
+ pause_btn.click(
420
+ fn=on_pause_click,
421
+ outputs=[pause_btn]
422
+ )
423
+
349
424
  # 添加定时器,分别更新按钮状态和任务状态
425
+ def update_run_button_status():
426
+ text, interactive = self.get_button_status()
427
+ return gr.Button(value=text, interactive=interactive)
428
+
350
429
  gr.Timer(1.0).tick(
351
- fn=self.get_button_status,
430
+ fn=update_run_button_status,
352
431
  outputs=[run_btn]
353
432
  )
433
+ gr.Timer(1.0).tick(
434
+ fn=self.get_pause_button_with_interactive,
435
+ outputs=[pause_btn]
436
+ )
354
437
  gr.Timer(1.0).tick(
355
438
  fn=self.update_task_status,
356
439
  outputs=[task_status]
@@ -370,21 +453,34 @@ class KotoneBotUI:
370
453
  value=None
371
454
  )
372
455
 
373
- # 创建执行按钮
374
- execute_btn = gr.Button("执行任务")
456
+ # 创建执行按钮和暂停按钮
457
+ with gr.Row():
458
+ execute_btn = gr.Button("执行任务", scale=2)
459
+ pause_btn = gr.Button("暂停", scale=1)
375
460
  task_result = gr.Markdown("")
376
461
 
377
- def toggle_single_task(task_name: str) -> Tuple[str, str]:
462
+ def toggle_single_task(task_name: str) -> Tuple[gr.Button, str]:
378
463
  if self.single_task_running:
379
- return self.stop_single_task()
464
+ # 如果正在停止过程中,忽略重复点击
465
+ if self.is_single_task_stopping:
466
+ return gr.Button(value="停止中...", interactive=False), "正在停止任务..."
467
+
468
+ result = self.stop_single_task()
469
+ return gr.Button(value=result[0], interactive=False), result[1]
380
470
  else:
381
- return self.start_single_task(task_name)
471
+ result = self.start_single_task(task_name)
472
+ return gr.Button(value=result[0], interactive=True), result[1]
382
473
 
383
- def get_task_button_status() -> str:
474
+ def get_task_button_status() -> gr.Button:
384
475
  if not hasattr(self, 'run_status') or not self.run_status.running:
385
476
  self.single_task_running = False
386
- return "执行任务"
387
- return "停止任务"
477
+ self.is_single_task_stopping = False # 重置停止状态
478
+ return gr.Button(value="执行任务", interactive=True)
479
+
480
+ if self.is_single_task_stopping:
481
+ return gr.Button(value="停止中...", interactive=False) # 停止中时禁用按钮
482
+
483
+ return gr.Button(value="停止任务", interactive=True)
388
484
 
389
485
  def get_single_task_status() -> str:
390
486
  if not hasattr(self, 'run_status'):
@@ -417,17 +513,29 @@ class KotoneBotUI:
417
513
 
418
514
  return ""
419
515
 
516
+ def on_pause_click(evt: gr.EventData) -> str:
517
+ return self.toggle_pause()
518
+
420
519
  execute_btn.click(
421
520
  fn=toggle_single_task,
422
521
  inputs=[task_dropdown],
423
522
  outputs=[execute_btn, task_result]
424
523
  )
425
524
 
525
+ pause_btn.click(
526
+ fn=on_pause_click,
527
+ outputs=[pause_btn]
528
+ )
529
+
426
530
  # 添加定时器更新按钮状态和任务状态
427
531
  gr.Timer(1.0).tick(
428
532
  fn=get_task_button_status,
429
533
  outputs=[execute_btn]
430
534
  )
535
+ gr.Timer(1.0).tick(
536
+ fn=self.get_pause_button_with_interactive,
537
+ outputs=[pause_btn]
538
+ )
431
539
  gr.Timer(1.0).tick(
432
540
  fn=get_single_task_status,
433
541
  outputs=[task_result]
@@ -1106,6 +1214,17 @@ class KotoneBotUI:
1106
1214
  label="Kuyo包名",
1107
1215
  info=StartGameConfig.model_fields['kuyo_package_name'].description
1108
1216
  )
1217
+ disable_gakumas_localify = gr.Checkbox(
1218
+ label="禁用 Gakumas Localify 汉化插件",
1219
+ value=self.current_config.options.start_game.disable_gakumas_localify,
1220
+ info=StartGameConfig.model_fields['disable_gakumas_localify'].description
1221
+ )
1222
+ dmm_game_path = gr.Textbox(
1223
+ value=self.current_config.options.start_game.dmm_game_path or "",
1224
+ label="DMM 版游戏路径",
1225
+ info=StartGameConfig.model_fields['dmm_game_path'].description,
1226
+ placeholder="例:F:\\Games\\gakumas\\gakumas.exe"
1227
+ )
1109
1228
  start_game_enabled.change(
1110
1229
  fn=lambda x: gr.Group(visible=x),
1111
1230
  inputs=[start_game_enabled],
@@ -1117,12 +1236,16 @@ class KotoneBotUI:
1117
1236
  config.start_game.start_through_kuyo = data['start_through_kuyo']
1118
1237
  config.start_game.game_package_name = data['game_package_name']
1119
1238
  config.start_game.kuyo_package_name = data['kuyo_package_name']
1120
-
1239
+ config.start_game.disable_gakumas_localify = data['disable_gakumas_localify']
1240
+ config.start_game.dmm_game_path = data['dmm_game_path'] if data['dmm_game_path'] else None
1241
+
1121
1242
  return set_config, {
1122
1243
  'start_game_enabled': start_game_enabled,
1123
1244
  'start_through_kuyo': start_through_kuyo,
1124
1245
  'game_package_name': game_package_name,
1125
- 'kuyo_package_name': kuyo_package_name
1246
+ 'kuyo_package_name': kuyo_package_name,
1247
+ 'disable_gakumas_localify': disable_gakumas_localify,
1248
+ 'dmm_game_path': dmm_game_path
1126
1249
  }
1127
1250
 
1128
1251
 
@@ -1160,6 +1283,11 @@ class KotoneBotUI:
1160
1283
  value=self.current_config.options.end_game.hibernate,
1161
1284
  info=EndGameConfig.model_fields['hibernate'].description
1162
1285
  )
1286
+ restore_gakumas_localify = gr.Checkbox(
1287
+ label="恢复 Gakumas Localify 汉化插件状态",
1288
+ value=self.current_config.options.end_game.restore_gakumas_localify,
1289
+ info=EndGameConfig.model_fields['restore_gakumas_localify'].description
1290
+ )
1163
1291
 
1164
1292
  def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
1165
1293
  config.end_game.exit_kaa = data['exit_kaa']
@@ -1168,14 +1296,16 @@ class KotoneBotUI:
1168
1296
  config.end_game.kill_emulator = data['kill_emulator']
1169
1297
  config.end_game.shutdown = data['shutdown']
1170
1298
  config.end_game.hibernate = data['hibernate']
1171
-
1299
+ config.end_game.restore_gakumas_localify = data['restore_gakumas_localify']
1300
+
1172
1301
  return set_config, {
1173
1302
  'exit_kaa': exit_kaa,
1174
1303
  'kill_game': kill_game,
1175
1304
  'kill_dmm': kill_dmm,
1176
1305
  'kill_emulator': kill_emulator,
1177
1306
  'shutdown': shutdown,
1178
- 'hibernate': hibernate
1307
+ 'hibernate': hibernate,
1308
+ 'restore_gakumas_localify': restore_gakumas_localify
1179
1309
  }
1180
1310
 
1181
1311
  def _create_activity_funds_settings(self) -> ConfigBuilderReturnValue:
kotonebot/kaa/metadata.py CHANGED
@@ -1,6 +1,18 @@
1
1
  WHATS_NEW = """
2
2
  # 更新日志
3
3
  ## kaa
4
+ ### v2025.6.8.0
5
+ 脚本:
6
+ * [新增] 新增支持自动禁用与恢复 Gakumasu Localify 汉化插件(#264dac2)
7
+ * [修复] 修复外出事件中可用按钮数量小于 2 导致的下标越界问题(#2452c8c)
8
+ * [修复] 尝试修复第一次领取饮料有几率卡住的问题(#7f2e588)
9
+
10
+ 框架:
11
+ * [新增] 新增全局暂停脚本执行功能(#a8e1f0d)
12
+
13
+ 其他:
14
+ * [其他] 新增开源协议与免责声明(#733aa6a)
15
+
4
16
  ### v2025.5.23.3
5
17
  脚本:
6
18
  * [修复] 尝试修复行动页有时进入行动失效的问题(#5901771)
Binary file
Binary file