ksaa 2025.7.13.0__py3-none-any.whl → 2025.7.27.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 (158) hide show
  1. kotonebot/backend/bot.py +60 -12
  2. kotonebot/backend/context/task_action.py +9 -46
  3. kotonebot/backend/dispatch.py +1 -104
  4. kotonebot/backend/flow_controller.py +3 -1
  5. kotonebot/errors.py +37 -2
  6. kotonebot/interop/win/message_box.py +314 -0
  7. kotonebot/interop/win/task_dialog.py +469 -0
  8. kotonebot/kaa/config/produce.py +8 -6
  9. kotonebot/kaa/config/schema.py +2 -0
  10. kotonebot/kaa/errors.py +38 -0
  11. kotonebot/kaa/main/gr.py +135 -34
  12. kotonebot/kaa/main/kaa.py +0 -1
  13. kotonebot/kaa/metadata.py +26 -0
  14. kotonebot/kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
  15. kotonebot/kaa/resources/game.db +0 -0
  16. kotonebot/kaa/resources/game_ver.txt +0 -0
  17. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-012_0.png +0 -0
  18. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-012_1.png +0 -0
  19. kotonebot/kaa/tasks/R.py +126 -126
  20. kotonebot/kaa/tasks/daily/contest.py +39 -8
  21. kotonebot/kaa/tasks/daily/purchase.py +3 -3
  22. kotonebot/kaa/tasks/end_game.py +4 -3
  23. kotonebot/kaa/tasks/produce/in_purodyuusu.py +35 -32
  24. kotonebot/kaa/tasks/produce/produce.py +2 -1
  25. kotonebot/kaa/tasks/start_game.py +2 -0
  26. kotonebot/ui/user.py +43 -13
  27. {ksaa-2025.7.13.0.dist-info → ksaa-2025.7.27.0.dist-info}/METADATA +2 -1
  28. {ksaa-2025.7.13.0.dist-info → ksaa-2025.7.27.0.dist-info}/RECORD +158 -153
  29. /kotonebot/kaa/sprites/{582e8afb-81d9-433b-9297-2741f78224c0.png → 039771df-9741-4f4e-9793-9017386ac68e.png} +0 -0
  30. /kotonebot/kaa/sprites/{3995bbdb-4b0c-4327-b299-7d105a78e977.png → 0c826d2e-41ce-474b-ad99-f4561baf03de.png} +0 -0
  31. /kotonebot/kaa/sprites/{96669532-4774-4c2e-bda0-ea94f3b1d41b.png → 0fb240b0-1bb5-4aee-8ad3-a24062ee9a20.png} +0 -0
  32. /kotonebot/kaa/sprites/{4f36ddbb-967e-41d5-9bdb-05bb8f906227.png → 10636534-51ee-4698-b582-e56751bebb4d.png} +0 -0
  33. /kotonebot/kaa/sprites/{cafb66c1-10d3-4612-80f9-f9e183d509c6.png → 1218bb7e-2cab-477e-aa51-f71aa4f52a7d.png} +0 -0
  34. /kotonebot/kaa/sprites/{985e8bd4-7658-4da1-beb3-c53220ec1c25.png → 1917a430-d216-4359-8f62-0b62108f58c1.png} +0 -0
  35. /kotonebot/kaa/sprites/{065de266-800e-4ebf-bab1-a37038e531d8.png → 1f56fbc1-47f5-4dc3-b91b-6e49e4ea00dc.png} +0 -0
  36. /kotonebot/kaa/sprites/{77a55e26-3901-4be0-9edb-a434c6e5e719.png → 25797538-2dc6-436c-b64a-597ae6d5db6e.png} +0 -0
  37. /kotonebot/kaa/sprites/{488c8e34-9a36-4335-8a69-c9288e3344d7.png → 27d59ead-0f94-4554-8c9a-cd3aeb606fea.png} +0 -0
  38. /kotonebot/kaa/sprites/{c0b5a0a7-0cb7-4d2c-8105-42b434437610.png → 2822bf2b-b350-437b-b330-0e8c122bfbe7.png} +0 -0
  39. /kotonebot/kaa/sprites/{8e0b582b-68d3-4a4f-93e1-dec23e8e6abf.png → 287ec12a-c1fb-4b8f-a77c-acc99821eabd.png} +0 -0
  40. /kotonebot/kaa/sprites/{ba45d490-da2e-4c2f-badf-7058f1802ad3.png → 290aaff5-71eb-4d71-87db-3757d3e9794b.png} +0 -0
  41. /kotonebot/kaa/sprites/{59d453f1-a2df-4138-9e4e-277f6b636bde.png → 29fcf4cb-883f-475e-a68f-107cffc83f1c.png} +0 -0
  42. /kotonebot/kaa/sprites/{6d7d40e7-8f54-40b5-a900-784e2ced0df5.png → 2ac90dcf-2284-437e-a61e-51934f937f8f.png} +0 -0
  43. /kotonebot/kaa/sprites/{14e920fb-7410-4927-96e1-c40211069182.png → 2e3410a1-49b5-4f65-8f26-bb1df213c2b8.png} +0 -0
  44. /kotonebot/kaa/sprites/{0d10fa02-b8e7-405a-a463-83f472807a39.png → 30bc31e4-40b3-4bcb-bb36-1dd5a8c59a32.png} +0 -0
  45. /kotonebot/kaa/sprites/{476c4b40-a024-4253-bd57-b775b1559c44.png → 34eaf943-a8b5-4358-aadc-62ff656ab542.png} +0 -0
  46. /kotonebot/kaa/sprites/{83d759a1-04fc-40d3-93d6-d31b4be70e5d.png → 37f1d878-467f-4ba0-bc59-bb327797191b.png} +0 -0
  47. /kotonebot/kaa/sprites/{ca37b366-0a29-436c-8c22-78daf4148bfe.png → 3aa13898-1a50-4234-b9ec-f35878f05592.png} +0 -0
  48. /kotonebot/kaa/sprites/{0b166ce2-85b0-4207-b4ee-e720462cf9ab.png → 3ca43ccf-8748-439f-80f7-a95978a6b1f2.png} +0 -0
  49. /kotonebot/kaa/sprites/{a5b80b05-f6a2-407e-bf93-27b88bd982d1.png → 3efe8341-33bc-492e-8a0f-69a507502b43.png} +0 -0
  50. /kotonebot/kaa/sprites/{0edc4c9d-9249-4bf0-86ad-c9fee3ee06f7.png → 3f6b5de5-c942-4ef1-8b04-5ee6859bb27b.png} +0 -0
  51. /kotonebot/kaa/sprites/{9e5202cc-ef3c-433e-8cbb-afa5842f0a34.png → 432aad91-9cc5-4518-bbfd-6cbed522dac6.png} +0 -0
  52. /kotonebot/kaa/sprites/{deca8ee5-616a-4652-8a37-dab4f34951b6.png → 452e213a-9762-42ec-8e2b-2cabc3eb254d.png} +0 -0
  53. /kotonebot/kaa/sprites/{32fa7671-2413-400f-9bad-3fd7859840e4.png → 46a8bf3e-7149-4d9b-8b31-a6b9c3d6b166.png} +0 -0
  54. /kotonebot/kaa/sprites/{44713a59-3d15-427a-af43-27efdc1b2b20.png → 48293a53-d05b-4198-995f-103531f26923.png} +0 -0
  55. /kotonebot/kaa/sprites/{b4db5745-d7d0-4afb-8962-9f71fc4188c8.png → 4c0dc941-6ecf-45b4-91f8-3fb10e770512.png} +0 -0
  56. /kotonebot/kaa/sprites/{34050b3d-1684-403d-95b1-8ad7ff2a85bb.png → 50986ada-ff64-405f-911d-f6c3655fb658.png} +0 -0
  57. /kotonebot/kaa/sprites/{6c2ba024-4e1e-4a07-9b58-277a1873c279.png → 535db21f-b22e-4a05-a7e8-81e3664305b8.png} +0 -0
  58. /kotonebot/kaa/sprites/{8a8f4be3-9538-4ead-9002-009432dce534.png → 5410568f-2e3c-49b2-8112-f43c52342298.png} +0 -0
  59. /kotonebot/kaa/sprites/{46189b9d-16fd-4385-9654-2a6fa95bc933.png → 5aa47ea4-79de-4547-9320-cf8c614c7366.png} +0 -0
  60. /kotonebot/kaa/sprites/{cf33f626-5944-4dfe-bb46-2976c187f2a9.png → 5d1627a0-f803-4736-8c3c-7bf1f0de0aa0.png} +0 -0
  61. /kotonebot/kaa/sprites/{c03c6076-7935-42e7-a2e5-5f74015e92e2.png → 5eaa9fa9-0bce-47ce-8f28-d5ba32c566c3.png} +0 -0
  62. /kotonebot/kaa/sprites/{721caff2-926b-4778-a20b-77c9fee8f45a.png → 650eee06-c926-4e91-bd2c-38f3068938c0.png} +0 -0
  63. /kotonebot/kaa/sprites/{cf007582-08d0-4fc7-bc7c-113e211b226a.png → 652c9b9f-316e-46b2-a2d4-8dc8d5e6116f.png} +0 -0
  64. /kotonebot/kaa/sprites/{92ac2224-ce9d-4ba0-aafc-c627ba97c163.png → 6621d884-5ba5-4356-bd50-94239ec5395a.png} +0 -0
  65. /kotonebot/kaa/sprites/{a9ec257b-d82f-4ebf-9b46-1af8836d5768.png → 66de3573-9562-4cd8-82df-5d6be6b1f213.png} +0 -0
  66. /kotonebot/kaa/sprites/{7a72a3ad-666c-478e-a249-2ca7e35f84cb.png → 6b71968e-97d3-4fad-89d0-ffb7743446a9.png} +0 -0
  67. /kotonebot/kaa/sprites/{b04f4554-d6ea-4f99-822c-657ad1b9cd1e.png → 6c7cb85e-0aac-40d8-9b55-d9b455c89985.png} +0 -0
  68. /kotonebot/kaa/sprites/{43648de0-a0dc-4d0b-b081-ddb4a6aae9c4.png → 6cba0d0c-a67b-470d-9abe-1c55b14310ba.png} +0 -0
  69. /kotonebot/kaa/sprites/{75972e14-44b8-4ac7-9bfa-a0e0ed563b05.png → 6d59fa9e-b988-47e3-99b5-e06510f98e45.png} +0 -0
  70. /kotonebot/kaa/sprites/{fb00d537-d921-4a5f-9bc7-8aac1b68a71d.png → 6eb8e6a5-b361-4c4f-b161-e2ccd5ef277d.png} +0 -0
  71. /kotonebot/kaa/sprites/{69601752-7606-4af4-9252-097be36eec84.png → 6ed77f5b-e4ce-4722-934e-3c5ec34b6d5a.png} +0 -0
  72. /kotonebot/kaa/sprites/{db2fb64d-3e2d-4cd4-ac3a-a993e9784697.png → 6f4d32df-2a01-40e8-bfd1-9e83c6864789.png} +0 -0
  73. /kotonebot/kaa/sprites/{9ff3e793-1c21-45c6-88b5-24543f300f81.png → 6f56551e-bfa3-4efe-b95a-411e54885ceb.png} +0 -0
  74. /kotonebot/kaa/sprites/{c2a12970-cfff-4772-a4ec-127f4309f2b5.png → 725d6877-7260-4ca3-91d3-da4e9ccbf206.png} +0 -0
  75. /kotonebot/kaa/sprites/{a7b99e72-68c1-4b11-994f-a3238bee5fa3.png → 74bb6050-8d6d-48aa-8e71-31e92304b5af.png} +0 -0
  76. /kotonebot/kaa/sprites/{9579ad74-b049-4e27-a07c-12537c5ee051.png → 760655f5-1d32-437c-81fc-306e80fabfd8.png} +0 -0
  77. /kotonebot/kaa/sprites/{4660a922-bb9a-4543-b11a-d7b3be41e42e.png → 763968fd-f7ab-4a46-a0ef-6a496b21d3dd.png} +0 -0
  78. /kotonebot/kaa/sprites/{e214cd8e-b79f-42e5-959a-64f745f35896.png → 77b7b404-bc0c-4637-96b0-7344f782989e.png} +0 -0
  79. /kotonebot/kaa/sprites/{897a1e29-c5e2-4c26-a348-6fd7d63c9f09.png → 79cddeac-828b-49a1-b860-b422e2c8d2ea.png} +0 -0
  80. /kotonebot/kaa/sprites/{f270ddb2-fabc-4dd6-818a-c818a44893ed.png → 7b74cacf-b8b4-4915-a71a-1dab321dab60.png} +0 -0
  81. /kotonebot/kaa/sprites/{917cd398-166e-4abe-a769-6d74cfbb611e.png → 7d931bd2-5cfc-4e4c-83c0-498b5e17d15c.png} +0 -0
  82. /kotonebot/kaa/sprites/{b34c399b-ea60-4de2-86ee-003d308594c2.png → 7dc4ea14-42a9-4b2f-a164-99da3dbb000b.png} +0 -0
  83. /kotonebot/kaa/sprites/{ee7c3730-b678-4ffe-a7e5-5637016ce5b4.png → 7dc5f386-2db3-4405-9796-34f1b8a6755f.png} +0 -0
  84. /kotonebot/kaa/sprites/{fc23b108-7717-4b16-9e91-aacd5ddcc2ce.png → 843174a9-6cff-45ba-9573-67904691a30f.png} +0 -0
  85. /kotonebot/kaa/sprites/{dd268b19-354f-4e39-a4b4-0578719a40e1.png → 85ca40d2-f02e-45a4-9db0-c483f6ae1db5.png} +0 -0
  86. /kotonebot/kaa/sprites/{8d093e5a-3ce8-4e67-9e5d-7d91f2dd3b00.png → 88207e47-1f50-485f-9984-54cea01d740a.png} +0 -0
  87. /kotonebot/kaa/sprites/{618b8738-c9ae-4def-951f-a3627b26a980.png → 88e01e80-50e2-4b0f-834c-86f6a3508287.png} +0 -0
  88. /kotonebot/kaa/sprites/{e7fb4631-aad6-4fad-934c-72396737a98a.png → 89b364ae-9050-4671-b595-632ba0efc78b.png} +0 -0
  89. /kotonebot/kaa/sprites/{9fd3858a-c2a7-468d-b224-ca6386a08d1e.png → 8d1a63f3-7ec4-405c-9d78-d176018389dc.png} +0 -0
  90. /kotonebot/kaa/sprites/{a49babfb-a958-4de0-b2c5-2c64ce8641fa.png → 8f941a44-bbe8-4d3d-82b3-7b14c2356998.png} +0 -0
  91. /kotonebot/kaa/sprites/{d9ac597e-8d6d-4ab3-b865-e68a83563d25.png → 95962144-c639-4902-ad2d-be11ccc5eaab.png} +0 -0
  92. /kotonebot/kaa/sprites/{0951b840-439e-4289-991e-51b5b2df0bb2.png → 96c79132-d55f-43d2-bdb3-6fe55734b6d5.png} +0 -0
  93. /kotonebot/kaa/sprites/{ffd7676f-6b57-42d2-9631-bc758d2e0a31.png → 9895c28f-eba2-4e37-911b-6c0f05f7d72b.png} +0 -0
  94. /kotonebot/kaa/sprites/{4ca16d51-1b1c-4174-98df-dce028749eb0.png → 98df22d6-1ff2-4c9a-87e7-f70e9f91019e.png} +0 -0
  95. /kotonebot/kaa/sprites/{48d52db5-9d6f-4d6d-a8a9-56ec3e03cf2e.png → 9b01dbe2-5043-40af-858c-33bbbf4ccc22.png} +0 -0
  96. /kotonebot/kaa/sprites/{d7b786c8-7887-4870-a719-f703945cc6f1.png → 9dc9f428-6e6d-4362-b4d4-dce50d9e732e.png} +0 -0
  97. /kotonebot/kaa/sprites/{c9f0ddc4-832c-42f0-b46d-a2b4326d1a1c.png → 9df02971-cdd8-4464-abf9-8035bc233d2f.png} +0 -0
  98. /kotonebot/kaa/sprites/{79d26ab2-499d-46a5-b15d-a0d0845fc535.png → 9e7bf71b-fe8d-43cf-8bdd-6cfb1fb1b597.png} +0 -0
  99. /kotonebot/kaa/sprites/{5cda82c5-6026-4a4b-9447-30779ef07e51.png → a043ed15-0ceb-49b5-b3df-d03274677340.png} +0 -0
  100. /kotonebot/kaa/sprites/{48a169b5-e3ad-41c8-9895-5fff217a24a3.png → a200b1e4-2ebc-4c15-bdf2-2575408877f8.png} +0 -0
  101. /kotonebot/kaa/sprites/{13ebdaaf-dee5-48be-963e-c2e6915b2b00.png → a718a6f9-db30-4a9c-9d2b-b83055cf36ae.png} +0 -0
  102. /kotonebot/kaa/sprites/{b1e6c930-f659-4ea8-a694-a4590160b438.png → a7ada2b7-1366-40c8-864e-fbb42d248124.png} +0 -0
  103. /kotonebot/kaa/sprites/{fa8ee7e4-ee13-497e-856b-e210f6b1f114.png → aa42da27-2c6a-4731-9678-edd3aefde4a7.png} +0 -0
  104. /kotonebot/kaa/sprites/{f621f114-11c3-4957-a86c-cb474721d660.png → aaa770da-fc42-4e4a-978c-8fef22c0ebf9.png} +0 -0
  105. /kotonebot/kaa/sprites/{9529c488-2256-4a3d-baed-4928c151b1b1.png → af54e00c-b768-4497-829b-6bfac16f4efc.png} +0 -0
  106. /kotonebot/kaa/sprites/{4ee4dde9-378f-4ef3-b1f3-29bbb3d9e073.png → afe94aea-47e2-4310-8e25-3e7cadc5a75d.png} +0 -0
  107. /kotonebot/kaa/sprites/{387b6503-d6c8-40ab-8cad-2a81021b6103.png → b0a88b9e-358f-4f35-b823-d6c025a516cf.png} +0 -0
  108. /kotonebot/kaa/sprites/{e6e33419-ee43-48d1-98c6-a64f07b9e9e9.png → b4ede50d-7edb-4461-bee6-77d13456fa30.png} +0 -0
  109. /kotonebot/kaa/sprites/{abeb625a-74c1-45dc-a6c9-2a123dee1ab4.png → b503e883-c9d2-46c0-9de2-158770abb32b.png} +0 -0
  110. /kotonebot/kaa/sprites/{d251bb28-4d34-4db9-85eb-554a56ac8184.png → b60b3563-20b4-46ad-b36b-3113d9e07d4c.png} +0 -0
  111. /kotonebot/kaa/sprites/{88cb2321-ac35-4fe6-a467-19ba5ef3af35.png → b9ded3ea-9701-441d-a593-e73e44d5fa3f.png} +0 -0
  112. /kotonebot/kaa/sprites/{a622194f-000b-48d9-871f-89e2ba9a249d.png → b9f285e4-eb97-47f0-9ca5-28ca558acf58.png} +0 -0
  113. /kotonebot/kaa/sprites/{e2d11737-e1e2-4056-bd85-7d242c9c3023.png → bbee032e-7fc1-4b4d-b1db-cc54b24c20c8.png} +0 -0
  114. /kotonebot/kaa/sprites/{7b58df80-77e7-4a81-84b5-3d7e61f4237e.png → bc68fbda-8e6d-4368-b322-49a6854d81e3.png} +0 -0
  115. /kotonebot/kaa/sprites/{33dfe24e-9cc8-43c9-98a8-999e850b778a.png → bf8d6419-472c-4941-8d69-9bb01af5c71a.png} +0 -0
  116. /kotonebot/kaa/sprites/{d1fff69a-474d-416f-a53f-2a88a4d552c7.png → c3548011-dc57-4542-a855-1e7f9d7762f7.png} +0 -0
  117. /kotonebot/kaa/sprites/{8acb588c-200f-4927-bb50-2f01c7fbf0f5.png → c46f1705-b4d5-4f39-b138-391a85fb0302.png} +0 -0
  118. /kotonebot/kaa/sprites/{661760df-f790-47cb-8ddf-21b684a1096d.png → c58be1dd-1981-42ee-8de3-e365102884e5.png} +0 -0
  119. /kotonebot/kaa/sprites/{5b382fe1-da9d-4644-b4e7-aa2759b36b9d.png → c8321b5a-8f65-4465-892a-a3432efba5ac.png} +0 -0
  120. /kotonebot/kaa/sprites/{6cc3d385-7c1a-4df2-92dd-0bc7f4931f2c.png → c95ee1bb-1e53-4568-ba92-9606071ad3a6.png} +0 -0
  121. /kotonebot/kaa/sprites/{10d7c07d-9731-4b2a-bc92-bfb822616303.png → ca9f52b1-42c0-4091-bc29-efc0da9606e0.png} +0 -0
  122. /kotonebot/kaa/sprites/{ebef3530-94ab-4ba7-b43e-5b3249286d51.png → ccba7903-9882-4982-ab84-355667d8419a.png} +0 -0
  123. /kotonebot/kaa/sprites/{d2fe6a19-df40-43f9-8e75-2376e9987290.png → d0dd43b7-5571-4e47-af51-796b4a6a1cfe.png} +0 -0
  124. /kotonebot/kaa/sprites/{84b25f6f-aeb4-41b0-bb61-9e028ee1173f.png → d274bf4d-f4ff-4270-9a5f-87685a0c6817.png} +0 -0
  125. /kotonebot/kaa/sprites/{f85c9e53-870d-46e4-9963-c5245d0c5628.png → d3565383-91b0-4b33-87a9-3468dfd56e52.png} +0 -0
  126. /kotonebot/kaa/sprites/{17d9408b-b429-402c-9d06-f2a0b2b1abe2.png → d552db90-8e22-427c-b004-1799adbcc6ba.png} +0 -0
  127. /kotonebot/kaa/sprites/{2228a02e-fec3-4bb7-ad29-d7ef0d7b7a90.png → d5943dc2-12df-42bb-84bc-d6958260cb75.png} +0 -0
  128. /kotonebot/kaa/sprites/{b06ebc30-305e-4f8a-8a3c-1d91aab4f9c0.png → d5be0aac-6f00-4961-b21c-4075bd6ca528.png} +0 -0
  129. /kotonebot/kaa/sprites/{db041968-9811-494c-ae2c-1b31d4e1773c.png → d65cf124-6c8e-41e4-80dc-0c63b41d5636.png} +0 -0
  130. /kotonebot/kaa/sprites/{69d32f6c-e982-4418-94f9-5a625dc06584.png → d79069c1-3b8e-4df7-8b14-4eeaa44241e1.png} +0 -0
  131. /kotonebot/kaa/sprites/{edcb7ca8-9e3f-4232-b6c9-b7189a62d2ec.png → db3ab847-948d-4ee0-b5cb-c57c0caa24fd.png} +0 -0
  132. /kotonebot/kaa/sprites/{f2b784ee-eeca-4633-9083-4cb996c26f66.png → dbc449e9-404e-435b-8b0f-3c853c7f0efe.png} +0 -0
  133. /kotonebot/kaa/sprites/{6151e500-a626-44db-89d5-a7b15d99f9aa.png → dc3f2602-1f20-460a-b408-693001aa70bc.png} +0 -0
  134. /kotonebot/kaa/sprites/{28b29b73-758c-41ef-8829-4b93d7a6f424.png → dcb63213-c81e-4eb7-82f1-a16a838299fe.png} +0 -0
  135. /kotonebot/kaa/sprites/{fd7ce00d-d45c-468b-a918-f5ded551a17d.png → df004f6b-683d-41e8-848f-2a838c585f43.png} +0 -0
  136. /kotonebot/kaa/sprites/{d1f662b1-7aa2-4ccc-a8bf-6e7a94ae2427.png → dfab89de-7365-4bc8-b332-6f62733123a2.png} +0 -0
  137. /kotonebot/kaa/sprites/{524134df-5ade-4eb0-903f-dbae8d2a6e00.png → e0a34a9a-69b6-4732-9b1c-7a2c6445cb76.png} +0 -0
  138. /kotonebot/kaa/sprites/{88bcca49-4150-4820-8b47-049f7f1aa604.png → e0cea27c-5b4e-4831-8fcf-65bccb9e5950.png} +0 -0
  139. /kotonebot/kaa/sprites/{09ca39cd-c964-4258-a860-6a327e31713c.png → e311e99e-ae64-442a-aed1-6fac29687d18.png} +0 -0
  140. /kotonebot/kaa/sprites/{80ca25c8-03b6-4ed8-bf0b-36f6ad71ffd4.png → e8e25d3c-569e-4eae-a707-3afa8c5f46ec.png} +0 -0
  141. /kotonebot/kaa/sprites/{740c5975-00d7-42a7-ad95-cee0d59db3f0.png → e9afeef0-fcbe-4d97-8b39-c57ab24a3f84.png} +0 -0
  142. /kotonebot/kaa/sprites/{31f239cb-58f7-4fe9-95e4-15572afa9855.png → ec9656c3-a984-47db-8661-e1ae8751d288.png} +0 -0
  143. /kotonebot/kaa/sprites/{5e00a181-041a-4456-8850-773f68de8573.png → ee4862f3-f298-446e-a68b-bd97259052e6.png} +0 -0
  144. /kotonebot/kaa/sprites/{eb56ba19-433e-4bab-9e47-7a2702c83954.png → ef585824-7bfa-427a-a185-4317c0bcb4f6.png} +0 -0
  145. /kotonebot/kaa/sprites/{fd3b7b22-7011-4267-8365-64a4933073a4.png → ef861253-914d-436e-aa01-731a5dd11e38.png} +0 -0
  146. /kotonebot/kaa/sprites/{b07b112c-08c8-45ff-b980-105d263ff1c4.png → f0b983cd-8bce-4b67-9214-493364244c26.png} +0 -0
  147. /kotonebot/kaa/sprites/{5ca735d9-04b0-40a4-8eda-adbf9d0ded34.png → f2906fc0-9192-48ca-bc5d-52e922b04d8d.png} +0 -0
  148. /kotonebot/kaa/sprites/{f88ee970-84ea-46b2-99e0-d3fe1cde908e.png → f3890caa-fa8b-43bc-ba30-82c5bbe1d12a.png} +0 -0
  149. /kotonebot/kaa/sprites/{2b845193-37f8-4e17-9fd2-52765977b1fa.png → f4c3a6f9-1149-4530-af30-c56d7e3d02b9.png} +0 -0
  150. /kotonebot/kaa/sprites/{995b71e0-ce5d-48b7-b1a1-35443a37c295.png → fa3bdcef-dfba-4cf2-a06f-e6078c07fb7d.png} +0 -0
  151. /kotonebot/kaa/sprites/{af04e2ac-bffa-4bfb-9580-c934e403d578.png → fab770fd-e250-4dd4-b9d2-80966ad452ac.png} +0 -0
  152. /kotonebot/kaa/sprites/{51c39af7-efe6-4763-a85c-f1275e7cf4e8.png → fb2f308f-a025-4606-b789-0455c7cf0af8.png} +0 -0
  153. /kotonebot/kaa/sprites/{96044a90-a417-4042-a359-ddfd374afd0c.png → fcc71fcd-b28e-4247-beb6-6f5422218c54.png} +0 -0
  154. /kotonebot/kaa/sprites/{8f1413b8-fe01-4a37-9c10-0dcabf092367.png → fe42018b-4987-4389-8d44-fb0cfd0f4dab.png} +0 -0
  155. {ksaa-2025.7.13.0.dist-info → ksaa-2025.7.27.0.dist-info}/WHEEL +0 -0
  156. {ksaa-2025.7.13.0.dist-info → ksaa-2025.7.27.0.dist-info}/entry_points.txt +0 -0
  157. {ksaa-2025.7.13.0.dist-info → ksaa-2025.7.27.0.dist-info}/licenses/LICENSE +0 -0
  158. {ksaa-2025.7.13.0.dist-info → ksaa-2025.7.27.0.dist-info}/top_level.txt +0 -0
kotonebot/kaa/main/gr.py CHANGED
@@ -14,6 +14,7 @@ from typing import List, Dict, Tuple, Literal, Generator, Callable, Any, get_arg
14
14
  import cv2
15
15
  import gradio as gr
16
16
 
17
+ from kotonebot.kaa.errors import ProduceSolutionNotFoundError
17
18
  from kotonebot.kaa.main import Kaa
18
19
  from kotonebot.kaa.db import IdolCard
19
20
  from kotonebot.backend.context.context import vars
@@ -51,7 +52,7 @@ ConfigKey = Literal[
51
52
  'mini_live_reassign', 'mini_live_duration',
52
53
  'online_live_reassign', 'online_live_duration',
53
54
  'contest_enabled',
54
- 'select_which_contestant',
55
+ 'select_which_contestant', 'when_no_set',
55
56
 
56
57
  # produce
57
58
  'produce_enabled', 'selected_solution_id', 'produce_count',
@@ -497,8 +498,8 @@ class KotoneBotUI:
497
498
  run_btn = gr.Button("启动", scale=2)
498
499
  pause_btn = gr.Button("暂停", scale=1)
499
500
 
500
- # 快速功能启停控制区域
501
- gr.Markdown("### 快速功能启停")
501
+ # 快速设置控制区域
502
+ gr.Markdown("### 快速设置")
502
503
  with gr.Row(elem_classes=["quick-controls-row"]):
503
504
  purchase_quick = gr.Checkbox(
504
505
  label="商店",
@@ -561,6 +562,20 @@ class KotoneBotUI:
561
562
  elem_classes=["quick-checkbox"]
562
563
  )
563
564
 
565
+ def _get_end_action_value() -> str:
566
+ if self.current_config.options.end_game.shutdown:
567
+ return "关机"
568
+ if self.current_config.options.end_game.hibernate:
569
+ return "休眠"
570
+ return "什么都不做"
571
+
572
+ end_action_dropdown = gr.Dropdown(
573
+ label="完成后:",
574
+ choices=["什么都不做", "关机", "休眠"],
575
+ value=_get_end_action_value(),
576
+ interactive=True
577
+ )
578
+
564
579
  if self._kaa.upgrade_msg:
565
580
  gr.Markdown('### 配置升级报告')
566
581
  gr.Markdown(self._kaa.upgrade_msg)
@@ -589,7 +604,7 @@ class KotoneBotUI:
589
604
  def on_pause_click(evt: gr.EventData) -> str:
590
605
  return self.toggle_pause()
591
606
 
592
- # 快速功能控制的事件处理函数
607
+ # 快速设置控制的事件处理函数
593
608
  def save_quick_setting(field_name: str, value: bool, display_name: str):
594
609
  """保存快速设置并立即应用"""
595
610
  try:
@@ -638,7 +653,7 @@ class KotoneBotUI:
638
653
  outputs=[pause_btn]
639
654
  )
640
655
 
641
- # 绑定快速功能控制的事件
656
+ # 绑定快速设置控制的事件
642
657
  purchase_quick.change(
643
658
  fn=lambda x: save_quick_setting('purchase', x, '商店'),
644
659
  inputs=[purchase_quick]
@@ -680,13 +695,42 @@ class KotoneBotUI:
680
695
  inputs=[upgrade_support_card_quick]
681
696
  )
682
697
 
698
+ # 处理完成后操作下拉框
699
+ def save_quick_end_action(action: str):
700
+ try:
701
+ if action == "关机":
702
+ self.current_config.options.end_game.shutdown = True
703
+ self.current_config.options.end_game.hibernate = False
704
+ elif action == "休眠":
705
+ self.current_config.options.end_game.shutdown = False
706
+ self.current_config.options.end_game.hibernate = True
707
+ else: # 什么都不做
708
+ self.current_config.options.end_game.shutdown = False
709
+ self.current_config.options.end_game.hibernate = False
710
+
711
+ save_config(self.config, "config.json")
712
+
713
+ # 尝试热重载配置
714
+ if self.reload_config():
715
+ gr.Success(f"✓ 完成后操作已设置为 {action}")
716
+ else:
717
+ gr.Warning("⚠ 设置已保存,但重新加载失败")
718
+ except Exception as e:
719
+ gr.Error(f"✗ 保存失败:{str(e)}")
720
+
721
+ end_action_dropdown.change(
722
+ fn=save_quick_end_action,
723
+ inputs=[end_action_dropdown]
724
+ )
725
+
683
726
  # 添加定时器,分别更新按钮状态和任务状态
684
727
  def update_run_button_status():
685
728
  text, interactive = self.get_button_status()
686
729
  return gr.Button(value=text, interactive=interactive)
687
730
 
688
731
  def update_quick_checkboxes():
689
- """更新快速功能控制的 checkbox 状态,确保与设置同步"""
732
+ """更新快速设置区域控件的状态,确保与设置同步"""
733
+ end_action_val = _get_end_action_value()
690
734
  return [
691
735
  gr.Checkbox(value=self.current_config.options.purchase.enabled),
692
736
  gr.Checkbox(value=self.current_config.options.assignment.enabled),
@@ -698,6 +742,7 @@ class KotoneBotUI:
698
742
  gr.Checkbox(value=self.current_config.options.presents.enabled),
699
743
  gr.Checkbox(value=self.current_config.options.capsule_toys.enabled),
700
744
  gr.Checkbox(value=self.current_config.options.upgrade_support_card.enabled),
745
+ gr.Dropdown(value=end_action_val),
701
746
  ]
702
747
 
703
748
  gr.Timer(1.0).tick(
@@ -713,7 +758,7 @@ class KotoneBotUI:
713
758
  outputs=[
714
759
  purchase_quick, assignment_quick, contest_quick, produce_quick,
715
760
  mission_reward_quick, club_reward_quick, activity_funds_quick, presents_quick,
716
- capsule_toys_quick, upgrade_support_card_quick
761
+ capsule_toys_quick, upgrade_support_card_quick, end_action_dropdown
717
762
  ]
718
763
  )
719
764
  gr.Timer(1.0).tick(
@@ -962,12 +1007,6 @@ class KotoneBotUI:
962
1007
  interactive=True
963
1008
  )
964
1009
 
965
- keep_screenshots = gr.Checkbox(
966
- label="保留截图数据",
967
- value=self.current_config.keep_screenshots,
968
- info=UserConfig.model_fields['keep_screenshots'].description,
969
- interactive=True
970
- )
971
1010
 
972
1011
  target_screenshot_interval = gr.Number(
973
1012
  label="最小截图间隔(秒)",
@@ -1032,14 +1071,12 @@ class KotoneBotUI:
1032
1071
  # Common settings for all backend types
1033
1072
  self.current_config.backend.screenshot_impl = data['screenshot_method']
1034
1073
  self.current_config.backend.target_screenshot_interval = data['target_screenshot_interval']
1035
- self.current_config.keep_screenshots = data['keep_screenshots'] # This is a UserConfig field
1036
1074
 
1037
1075
  return set_config, {
1038
1076
  'adb_ip': adb_ip,
1039
1077
  'adb_port': adb_port,
1040
- 'screenshot_method': screenshot_impl, # screenshot_impl is the component
1078
+ 'screenshot_method': screenshot_impl,
1041
1079
  'target_screenshot_interval': target_screenshot_interval,
1042
- 'keep_screenshots': keep_screenshots,
1043
1080
  'check_emulator': check_emulator,
1044
1081
  'emulator_path': emulator_path,
1045
1082
  'adb_emulator_name': adb_emulator_name,
@@ -1214,6 +1251,20 @@ class KotoneBotUI:
1214
1251
  interactive=True,
1215
1252
  info=ContestConfig.model_fields['select_which_contestant'].description
1216
1253
  )
1254
+
1255
+ when_no_set_choices = [
1256
+ ("通知我并跳过竞赛", "remind"),
1257
+ ("提醒我并等待手动编成", "wait"),
1258
+ ("使用自动编成并提醒我", "auto_set"),
1259
+ ("使用自动编成", "auto_set_silent")
1260
+ ]
1261
+ when_no_set = gr.Dropdown(
1262
+ choices=when_no_set_choices,
1263
+ value=self.current_config.options.contest.when_no_set,
1264
+ label="竞赛队伍未编成时",
1265
+ interactive=True,
1266
+ info=ContestConfig.model_fields['when_no_set'].description
1267
+ )
1217
1268
  contest_enabled.change(
1218
1269
  fn=lambda x: gr.Group(visible=x),
1219
1270
  inputs=[contest_enabled],
@@ -1223,10 +1274,12 @@ class KotoneBotUI:
1223
1274
  def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
1224
1275
  config.contest.enabled = data['contest_enabled']
1225
1276
  config.contest.select_which_contestant = data['select_which_contestant']
1226
-
1277
+ config.contest.when_no_set = data['when_no_set']
1278
+
1227
1279
  return set_config, {
1228
1280
  'contest_enabled': contest_enabled,
1229
- 'select_which_contestant': select_which_contestant
1281
+ 'select_which_contestant': select_which_contestant,
1282
+ 'when_no_set': when_no_set
1230
1283
  }
1231
1284
 
1232
1285
  def _create_produce_settings(self) -> ConfigBuilderReturnValue:
@@ -1317,7 +1370,7 @@ class KotoneBotUI:
1317
1370
  if selected_solution_id:
1318
1371
  try:
1319
1372
  current_solution = solution_manager.read(selected_solution_id)
1320
- except FileNotFoundError:
1373
+ except ProduceSolutionNotFoundError:
1321
1374
  pass
1322
1375
 
1323
1376
  if current_solution is None:
@@ -1596,6 +1649,8 @@ class KotoneBotUI:
1596
1649
  gr.Group(visible=False), # memory_sets_group
1597
1650
  gr.Dropdown(visible=False), # memory_sets
1598
1651
  gr.Checkbox(visible=False), # auto_set_support
1652
+ gr.Group(visible=False), # support_card_sets_group
1653
+ gr.Dropdown(visible=False), # support_card_sets
1599
1654
  gr.Checkbox(visible=False), # use_pt_boost
1600
1655
  gr.Checkbox(visible=False), # use_note_boost
1601
1656
  gr.Checkbox(visible=False), # follow_producer
@@ -1637,7 +1692,7 @@ class KotoneBotUI:
1637
1692
  gr.Checkbox(value=solution.data.skip_commu, visible=True),
1638
1693
  gr.Button(visible=True), # save_solution_btn
1639
1694
  ]
1640
- except FileNotFoundError:
1695
+ except ProduceSolutionNotFoundError:
1641
1696
  gr.Warning(f"培育方案 {solution_id} 不存在")
1642
1697
  return on_solution_change(None)
1643
1698
  except Exception as e:
@@ -1655,12 +1710,15 @@ class KotoneBotUI:
1655
1710
  solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
1656
1711
 
1657
1712
  gr.Success("新培育方案创建成功")
1658
- # 根据是否有设置Tab的下拉框来决定返回值
1659
- updated_dropdown = gr.Dropdown(choices=solution_choices, value=new_solution.id)
1713
+
1714
+ # 更新培育 Tab 下拉框并保持设置 Tab 当前选中值
1715
+ updated_dropdown_produce = gr.Dropdown(choices=solution_choices, value=new_solution.id)
1660
1716
  if settings_dropdown is not None:
1661
- return [updated_dropdown, updated_dropdown]
1717
+ current_selected = self.current_config.options.produce.selected_solution_id
1718
+ updated_dropdown_settings = gr.Dropdown(choices=solution_choices, value=current_selected)
1719
+ return [updated_dropdown_produce, updated_dropdown_settings]
1662
1720
  else:
1663
- return updated_dropdown
1721
+ return updated_dropdown_produce
1664
1722
  except Exception as e:
1665
1723
  gr.Error(f"创建培育方案失败:{str(e)}")
1666
1724
  if settings_dropdown is not None:
@@ -1677,6 +1735,14 @@ class KotoneBotUI:
1677
1735
  else:
1678
1736
  return gr.Dropdown()
1679
1737
 
1738
+ # 若尝试删除当前正在使用的培育方案,则拒绝并提示
1739
+ if solution_id == self.current_config.options.produce.selected_solution_id:
1740
+ gr.Warning("不可删除选中方案。请先在设置中选择其他方案,保存后再删除此方案。")
1741
+ if settings_dropdown is not None:
1742
+ return [gr.Dropdown(), gr.Dropdown()]
1743
+ else:
1744
+ return gr.Dropdown()
1745
+
1680
1746
  try:
1681
1747
  solution_manager.delete(solution_id)
1682
1748
 
@@ -1685,8 +1751,12 @@ class KotoneBotUI:
1685
1751
  solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
1686
1752
 
1687
1753
  gr.Success("培育方案删除成功")
1688
- # 根据是否有设置Tab的下拉框来决定返回值
1689
- updated_dropdown = gr.Dropdown(choices=solution_choices, value=None)
1754
+ # 删除方案后,保持当前培育方案的选择不变
1755
+ current_selected = self.current_config.options.produce.selected_solution_id
1756
+ if current_selected not in [sol.id for sol in solutions]:
1757
+ current_selected = None # 已不存在
1758
+
1759
+ updated_dropdown = gr.Dropdown(choices=solution_choices, value=current_selected)
1690
1760
  if settings_dropdown is not None:
1691
1761
  return [updated_dropdown, updated_dropdown]
1692
1762
  else:
@@ -2166,6 +2236,37 @@ class KotoneBotUI:
2166
2236
  'expose_to_lan': expose_to_lan
2167
2237
  }
2168
2238
 
2239
+ def _create_debug_settings(self) -> ConfigBuilderReturnValue:
2240
+ """调试设置:仅在调试时使用"""
2241
+ with gr.Column():
2242
+ gr.Markdown("### 调试设置")
2243
+ gr.Markdown('<div style="color: red;">仅供调试使用。正常运行时务必关闭下面所有的选项。</div>')
2244
+
2245
+ keep_screenshots = gr.Checkbox(
2246
+ label="保留截图数据",
2247
+ value=self.current_config.keep_screenshots,
2248
+ info=UserConfig.model_fields['keep_screenshots'].description,
2249
+ interactive=True
2250
+ )
2251
+
2252
+ trace_recommend_card_detection = gr.Checkbox(
2253
+ label="跟踪推荐卡检测",
2254
+ value=self.current_config.options.trace.recommend_card_detection,
2255
+ info=TraceConfig.model_fields['recommend_card_detection'].description,
2256
+ interactive=True
2257
+ )
2258
+
2259
+ def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
2260
+ # 保留截图数据属于 UserConfig
2261
+ self.current_config.keep_screenshots = data['keep_screenshots']
2262
+ # 跟踪推荐卡检测属于 BaseConfig.trace
2263
+ config.trace.recommend_card_detection = data['trace_recommend_card_detection']
2264
+
2265
+ return set_config, {
2266
+ 'keep_screenshots': keep_screenshots,
2267
+ 'trace_recommend_card_detection': trace_recommend_card_detection
2268
+ }
2269
+
2169
2270
  def _create_settings_tab(self) -> None:
2170
2271
  with gr.Tab("设置"):
2171
2272
  gr.Markdown("## 设置")
@@ -2200,18 +2301,18 @@ class KotoneBotUI:
2200
2301
  # 升级支援卡设置
2201
2302
  capsule_toys_settings = self._create_capsule_toys_settings()
2202
2303
 
2203
- # 跟踪设置
2204
- trace_settings = self._create_trace_settings()
2205
-
2206
- # 杂项设置
2207
- misc_settings = self._create_misc_settings()
2208
-
2209
2304
  # 启动游戏设置
2210
2305
  start_game_settings = self._create_start_game_settings()
2211
2306
 
2212
2307
  # 关闭游戏设置
2213
2308
  end_game_settings = self._create_end_game_settings()
2214
2309
 
2310
+ # 杂项设置
2311
+ misc_settings = self._create_misc_settings()
2312
+
2313
+ # 调试设置(放在最后)
2314
+ debug_settings = self._create_debug_settings()
2315
+
2215
2316
  save_btn = gr.Button("保存设置")
2216
2317
  result = gr.Markdown()
2217
2318
 
@@ -2229,8 +2330,8 @@ class KotoneBotUI:
2229
2330
  capsule_toys_settings,
2230
2331
  start_game_settings,
2231
2332
  end_game_settings,
2232
- trace_settings,
2233
- misc_settings
2333
+ misc_settings,
2334
+ debug_settings
2234
2335
  ] # list of (set_func, { 'key': component, ... })
2235
2336
  all_components = [list(ret[1].values()) for ret in all_return_values] # [[c1, c2], [c3], ...]
2236
2337
  all_components = list(chain(*all_components)) # [c1, c2, c3, ...]
kotonebot/kaa/main/kaa.py CHANGED
@@ -146,7 +146,6 @@ class Kaa(KotoneBot):
146
146
  raise ValueError('Backend instance is not set.')
147
147
  _set_instance(self.backend_instance)
148
148
  from kotonebot import device
149
- logger.info('Device resolution: %s', device.screen_size)
150
149
  logger.info('Set target resolution to 720x1280.')
151
150
  device.orientation = 'portrait'
152
151
  device.target_resolution = (720, 1280)
kotonebot/kaa/metadata.py CHANGED
@@ -1,6 +1,32 @@
1
1
  WHATS_NEW = """
2
2
  # 更新日志
3
3
  ## kaa
4
+ ### v2025.7.27.0
5
+ 脚本:
6
+ * [修复] 修复竞赛总是卡在跳过页面(#738ec9e)
7
+ * [修复] 修复 DMM 版启动游戏的过程中无法中断的问题(#ceaaed7)
8
+ * [新增] 即使执行任务出错也会执行关闭游戏任务(#9c9e4af)
9
+ * [新增] 优化培育方案错误与选人未找到错误的提示(#b51f9cd)
10
+ * [新增] 竞赛未编成时支持暂停与通知(#3be8485)
11
+
12
+ 框架:
13
+ * [新增] Task 新增 pre、post、regular、manual 四种 run_at 类型(#0b7054e)
14
+ * [新增] 新增 MessageBox 与 TaskDialog 的 Win32API 封装(#3e544e9)
15
+ * [新增] 支持任务执行中只跳过或停止当前任务(#a167cbf)
16
+ * [重构] 移除了废弃的 dispatcher 与 action 分发器重载(#09252c5)
17
+
18
+ ### v2025.7.20.0
19
+ 脚本:
20
+ * [修复] 修复商店购买中购买推荐商品时点击推荐标签不生效的问题(#b07d4d3)
21
+ * [修复] 修复 DMM 上由于输出分辨率到日志中导致的启动失败问题(#4deea1d)
22
+ * [修复] 修复严格模式下长时间卡在四张卡的推荐卡检测上(#acfb554)
23
+
24
+ 界面:
25
+ * [修复] 修复新建培育方案时会自动修改当前选中的方案的问题(#3e67627)
26
+ * [修复] 修复删除培育时的报错问题(#1b385c0)
27
+ * [新增] 将保留截图数据与跟踪推荐卡两个选项统一移动到调试设置中(#f929046)
28
+ * [新增] 首页快速功能区域新增完成后操作(#b8ade2f)
29
+
4
30
  ### v2025.7.13.0
5
31
  脚本:
6
32
  * [新增] 上传报告时一并打包配置文件(#a8a5566)
Binary file
Binary file