ksaa 2025.7.27.0__py3-none-any.whl → 2025.8.2.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 (162) hide show
  1. kotonebot/__init__.py +2 -1
  2. kotonebot/backend/loop.py +276 -276
  3. kotonebot/interop/win/shortcut.py +43 -0
  4. kotonebot/kaa/application/adapter/misc_adapter.py +5 -0
  5. kotonebot/kaa/application/core/misc_core.py +33 -0
  6. kotonebot/kaa/errors.py +14 -0
  7. kotonebot/kaa/main/cli.py +2 -1
  8. kotonebot/kaa/main/gr.py +92 -53
  9. kotonebot/kaa/metadata.py +18 -0
  10. kotonebot/kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
  11. kotonebot/kaa/resources/game.db +0 -0
  12. kotonebot/kaa/resources/game_ver.txt +0 -0
  13. kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-3-010_0.png +0 -0
  14. kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-3-010_1.png +0 -0
  15. kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-012_0.png +0 -0
  16. kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-012_1.png +0 -0
  17. kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-011_0.png +0 -0
  18. kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-011_1.png +0 -0
  19. kotonebot/kaa/tasks/R.py +126 -126
  20. kotonebot/kaa/tasks/actions/scenes.py +4 -10
  21. kotonebot/kaa/tasks/daily/capsule_toys.py +3 -4
  22. kotonebot/kaa/tasks/daily/contest.py +3 -7
  23. kotonebot/kaa/tasks/daily/mission_reward.py +13 -10
  24. kotonebot/kaa/tasks/daily/purchase.py +13 -11
  25. kotonebot/kaa/tasks/produce/cards.py +3 -8
  26. kotonebot/kaa/tasks/produce/common.py +3 -9
  27. kotonebot/kaa/tasks/produce/in_purodyuusu.py +93 -83
  28. kotonebot/kaa/tasks/produce/non_lesson_actions.py +35 -27
  29. kotonebot/kaa/tasks/produce/produce.py +18 -18
  30. kotonebot/kaa/tasks/start_game.py +4 -9
  31. {ksaa-2025.7.27.0.dist-info → ksaa-2025.8.2.0.dist-info}/METADATA +1 -1
  32. {ksaa-2025.7.27.0.dist-info → ksaa-2025.8.2.0.dist-info}/RECORD +162 -153
  33. /kotonebot/kaa/sprites/{98df22d6-1ff2-4c9a-87e7-f70e9f91019e.png → 01e8e85e-056c-4428-9cb2-4024c4e6d022.png} +0 -0
  34. /kotonebot/kaa/sprites/{88207e47-1f50-485f-9984-54cea01d740a.png → 0300702d-1023-4af7-9fee-54c058f7f1a8.png} +0 -0
  35. /kotonebot/kaa/sprites/{6cba0d0c-a67b-470d-9abe-1c55b14310ba.png → 0450fdf0-f03d-4efc-b047-27532571c620.png} +0 -0
  36. /kotonebot/kaa/sprites/{a043ed15-0ceb-49b5-b3df-d03274677340.png → 065cbac0-e09a-4bec-aa10-5fdb41720d31.png} +0 -0
  37. /kotonebot/kaa/sprites/{760655f5-1d32-437c-81fc-306e80fabfd8.png → 1193a4e3-4d0d-4433-97ce-b19aeb6846c5.png} +0 -0
  38. /kotonebot/kaa/sprites/{2ac90dcf-2284-437e-a61e-51934f937f8f.png → 133ea490-fefe-4785-b531-3cc7072338da.png} +0 -0
  39. /kotonebot/kaa/sprites/{8f941a44-bbe8-4d3d-82b3-7b14c2356998.png → 14cd7285-f587-49af-9960-802c41050201.png} +0 -0
  40. /kotonebot/kaa/sprites/{f4c3a6f9-1149-4530-af30-c56d7e3d02b9.png → 1564ee9a-c2eb-4284-b22a-dd8df7c8a32f.png} +0 -0
  41. /kotonebot/kaa/sprites/{b60b3563-20b4-46ad-b36b-3113d9e07d4c.png → 180b211b-3b77-43a9-b550-6624f1b1beb1.png} +0 -0
  42. /kotonebot/kaa/sprites/{d3565383-91b0-4b33-87a9-3468dfd56e52.png → 19060076-f971-411c-9b1b-f22e18871b74.png} +0 -0
  43. /kotonebot/kaa/sprites/{3aa13898-1a50-4234-b9ec-f35878f05592.png → 190c0a4a-24c2-4717-8a78-ffa7bb0366d2.png} +0 -0
  44. /kotonebot/kaa/sprites/{fab770fd-e250-4dd4-b9d2-80966ad452ac.png → 1935d9dc-84ff-47a8-a65b-a458a224b4cc.png} +0 -0
  45. /kotonebot/kaa/sprites/{1917a430-d216-4359-8f62-0b62108f58c1.png → 1c0c3381-4d9b-4279-ac89-784b9e9d7e63.png} +0 -0
  46. /kotonebot/kaa/sprites/{1218bb7e-2cab-477e-aa51-f71aa4f52a7d.png → 1ec343a7-f6d4-4ab5-967b-66f900438977.png} +0 -0
  47. /kotonebot/kaa/sprites/{2822bf2b-b350-437b-b330-0e8c122bfbe7.png → 203dfb12-640e-4437-9040-47045c9b8cbd.png} +0 -0
  48. /kotonebot/kaa/sprites/{650eee06-c926-4e91-bd2c-38f3068938c0.png → 22394de7-f95b-4001-a961-d854c34f1d8c.png} +0 -0
  49. /kotonebot/kaa/sprites/{b9f285e4-eb97-47f0-9ca5-28ca558acf58.png → 248f9401-c340-474f-baed-1a523f441f3e.png} +0 -0
  50. /kotonebot/kaa/sprites/{0fb240b0-1bb5-4aee-8ad3-a24062ee9a20.png → 2a317f0e-613e-48c4-9def-d18a3b834254.png} +0 -0
  51. /kotonebot/kaa/sprites/{ef861253-914d-436e-aa01-731a5dd11e38.png → 2b225eb3-c1b2-415a-99de-1a41a0ed4470.png} +0 -0
  52. /kotonebot/kaa/sprites/{d552db90-8e22-427c-b004-1799adbcc6ba.png → 2d59f524-840a-445f-b432-c97051eb7043.png} +0 -0
  53. /kotonebot/kaa/sprites/{a7ada2b7-1366-40c8-864e-fbb42d248124.png → 327733fe-e68a-4f96-9e42-2b16629cbf8a.png} +0 -0
  54. /kotonebot/kaa/sprites/{c58be1dd-1981-42ee-8de3-e365102884e5.png → 343d630f-375f-496a-98c5-75a1e0aa2c2c.png} +0 -0
  55. /kotonebot/kaa/sprites/{46a8bf3e-7149-4d9b-8b31-a6b9c3d6b166.png → 356f4aa8-ebc5-4edc-9724-badf6d02d61e.png} +0 -0
  56. /kotonebot/kaa/sprites/{6621d884-5ba5-4356-bd50-94239ec5395a.png → 39a5eb7d-0ece-4eca-bf0e-4bf2f8faf1e2.png} +0 -0
  57. /kotonebot/kaa/sprites/{7d931bd2-5cfc-4e4c-83c0-498b5e17d15c.png → 39ab37d4-2654-4102-ba75-17d6bbd79673.png} +0 -0
  58. /kotonebot/kaa/sprites/{432aad91-9cc5-4518-bbfd-6cbed522dac6.png → 3ac2cb20-6563-4505-85bc-1fd3b93902a3.png} +0 -0
  59. /kotonebot/kaa/sprites/{039771df-9741-4f4e-9793-9017386ac68e.png → 3fa41725-c619-4ed8-811c-c6f0e9366126.png} +0 -0
  60. /kotonebot/kaa/sprites/{b0a88b9e-358f-4f35-b823-d6c025a516cf.png → 43c175e2-7e7e-405a-8c92-0cf3d7400d12.png} +0 -0
  61. /kotonebot/kaa/sprites/{fe42018b-4987-4389-8d44-fb0cfd0f4dab.png → 44d9cfe6-742c-46de-8f53-4f49babfabcc.png} +0 -0
  62. /kotonebot/kaa/sprites/{d5943dc2-12df-42bb-84bc-d6958260cb75.png → 4a395a76-b1b6-4541-97b0-2e2603d47360.png} +0 -0
  63. /kotonebot/kaa/sprites/{9dc9f428-6e6d-4362-b4d4-dce50d9e732e.png → 50ca8582-8787-45ff-a6b6-e1f0e8b44cb5.png} +0 -0
  64. /kotonebot/kaa/sprites/{74bb6050-8d6d-48aa-8e71-31e92304b5af.png → 52e0b7fe-271f-4713-b1b3-b06a286630d7.png} +0 -0
  65. /kotonebot/kaa/sprites/{9df02971-cdd8-4464-abf9-8035bc233d2f.png → 55e853dd-07bc-4086-8a2d-60d24ff75839.png} +0 -0
  66. /kotonebot/kaa/sprites/{af54e00c-b768-4497-829b-6bfac16f4efc.png → 57c8fe6f-e970-4364-9359-9c273ca37b85.png} +0 -0
  67. /kotonebot/kaa/sprites/{34eaf943-a8b5-4358-aadc-62ff656ab542.png → 58cbe76f-7cab-490d-8668-1076e76d9e9f.png} +0 -0
  68. /kotonebot/kaa/sprites/{6ed77f5b-e4ce-4722-934e-3c5ec34b6d5a.png → 58f1212f-a307-4179-a55c-8449e237cb3d.png} +0 -0
  69. /kotonebot/kaa/sprites/{89b364ae-9050-4671-b595-632ba0efc78b.png → 5ac654b1-f891-46b4-a4b2-3b8f9a60a02b.png} +0 -0
  70. /kotonebot/kaa/sprites/{ee4862f3-f298-446e-a68b-bd97259052e6.png → 5b94cf27-4aa0-4de1-a9f2-ba8f5ca790fd.png} +0 -0
  71. /kotonebot/kaa/sprites/{d0dd43b7-5571-4e47-af51-796b4a6a1cfe.png → 5bf54b6d-d2b6-4211-b3f4-0713b84dd315.png} +0 -0
  72. /kotonebot/kaa/sprites/{843174a9-6cff-45ba-9573-67904691a30f.png → 5c2e3a85-838c-41d5-b55e-b62fc1b95a1e.png} +0 -0
  73. /kotonebot/kaa/sprites/{6f56551e-bfa3-4efe-b95a-411e54885ceb.png → 5da76978-7dc4-4d4e-8e4c-e3189e2c2b07.png} +0 -0
  74. /kotonebot/kaa/sprites/{3ca43ccf-8748-439f-80f7-a95978a6b1f2.png → 5f1e618b-a1fc-41c6-9b05-f2a76c38feb5.png} +0 -0
  75. /kotonebot/kaa/sprites/{6f4d32df-2a01-40e8-bfd1-9e83c6864789.png → 6006a923-8f9b-4dfc-aa81-1e4672db6908.png} +0 -0
  76. /kotonebot/kaa/sprites/{6eb8e6a5-b361-4c4f-b161-e2ccd5ef277d.png → 63a3a9ca-aff2-428a-8df2-9a0ed4e398c6.png} +0 -0
  77. /kotonebot/kaa/sprites/{7b74cacf-b8b4-4915-a71a-1dab321dab60.png → 644a3f8a-6b32-4c3e-9701-acb426502f81.png} +0 -0
  78. /kotonebot/kaa/sprites/{5d1627a0-f803-4736-8c3c-7bf1f0de0aa0.png → 66cc412b-a4a1-4b42-89b4-7653eef41204.png} +0 -0
  79. /kotonebot/kaa/sprites/{66de3573-9562-4cd8-82df-5d6be6b1f213.png → 6770f2b1-1619-4937-bf8d-284b90a5d3c6.png} +0 -0
  80. /kotonebot/kaa/sprites/{48293a53-d05b-4198-995f-103531f26923.png → 6b2bd35a-d399-4486-b4ef-24abb3e6669f.png} +0 -0
  81. /kotonebot/kaa/sprites/{452e213a-9762-42ec-8e2b-2cabc3eb254d.png → 70a0da32-7fe7-41a9-9fc1-265764a0b125.png} +0 -0
  82. /kotonebot/kaa/sprites/{27d59ead-0f94-4554-8c9a-cd3aeb606fea.png → 727c2d86-0daf-47d3-8eb4-500e648abfd6.png} +0 -0
  83. /kotonebot/kaa/sprites/{d274bf4d-f4ff-4270-9a5f-87685a0c6817.png → 72ea8e77-8773-47bf-9c5f-bf51812065cd.png} +0 -0
  84. /kotonebot/kaa/sprites/{e0cea27c-5b4e-4831-8fcf-65bccb9e5950.png → 73c270f5-055a-4cc3-9036-c95321faec4a.png} +0 -0
  85. /kotonebot/kaa/sprites/{dc3f2602-1f20-460a-b408-693001aa70bc.png → 74423820-b24e-4dd1-b6c4-7ef3d6aa3b8c.png} +0 -0
  86. /kotonebot/kaa/sprites/{dcb63213-c81e-4eb7-82f1-a16a838299fe.png → 74d02db5-a02d-43d0-ae7a-5aeba90249be.png} +0 -0
  87. /kotonebot/kaa/sprites/{f0b983cd-8bce-4b67-9214-493364244c26.png → 76e3c1b4-cd2f-47f1-96bf-9b86a84aa24c.png} +0 -0
  88. /kotonebot/kaa/sprites/{b503e883-c9d2-46c0-9de2-158770abb32b.png → 77c9d69b-1078-477f-897f-c50bc5013fd5.png} +0 -0
  89. /kotonebot/kaa/sprites/{d65cf124-6c8e-41e4-80dc-0c63b41d5636.png → 785837db-1da3-46d0-866f-017c232547ad.png} +0 -0
  90. /kotonebot/kaa/sprites/{b9ded3ea-9701-441d-a593-e73e44d5fa3f.png → 7c6dd46a-62ff-4d2c-b04a-df97ba55ed74.png} +0 -0
  91. /kotonebot/kaa/sprites/{7dc4ea14-42a9-4b2f-a164-99da3dbb000b.png → 876ec159-fc25-4c97-9c37-e3ffaba7618b.png} +0 -0
  92. /kotonebot/kaa/sprites/{9b01dbe2-5043-40af-858c-33bbbf4ccc22.png → 88e9493c-0914-489a-9d99-addff4f0efd0.png} +0 -0
  93. /kotonebot/kaa/sprites/{6c7cb85e-0aac-40d8-9b55-d9b455c89985.png → 891d4f63-df7f-462c-8908-ff4380c91b8b.png} +0 -0
  94. /kotonebot/kaa/sprites/{88e01e80-50e2-4b0f-834c-86f6a3508287.png → 8cd02d5b-96f7-4b59-8676-ca07a63a7693.png} +0 -0
  95. /kotonebot/kaa/sprites/{7dc5f386-2db3-4405-9796-34f1b8a6755f.png → 8fb0f6d1-388b-41b3-964b-5965c58605c7.png} +0 -0
  96. /kotonebot/kaa/sprites/{fb2f308f-a025-4606-b789-0455c7cf0af8.png → 8fc97425-3b86-42cd-820d-2ad6321508f3.png} +0 -0
  97. /kotonebot/kaa/sprites/{652c9b9f-316e-46b2-a2d4-8dc8d5e6116f.png → 9169b74f-7458-4562-bc90-41efe0edfc22.png} +0 -0
  98. /kotonebot/kaa/sprites/{bc68fbda-8e6d-4368-b322-49a6854d81e3.png → 929d1dc7-6f9e-444b-9b57-ab8baacfe524.png} +0 -0
  99. /kotonebot/kaa/sprites/{c8321b5a-8f65-4465-892a-a3432efba5ac.png → 92d4209d-5053-4284-a9f5-63372c8cd05b.png} +0 -0
  100. /kotonebot/kaa/sprites/{4c0dc941-6ecf-45b4-91f8-3fb10e770512.png → 9552c822-a654-46a8-acd9-0320a4b6118b.png} +0 -0
  101. /kotonebot/kaa/sprites/{ca9f52b1-42c0-4091-bc29-efc0da9606e0.png → 969ddfa4-c0c8-41c8-b51b-40febf152c7a.png} +0 -0
  102. /kotonebot/kaa/sprites/{6b71968e-97d3-4fad-89d0-ffb7743446a9.png → 96b9b3cb-7131-46ba-a193-f46446f72194.png} +0 -0
  103. /kotonebot/kaa/sprites/{9e7bf71b-fe8d-43cf-8bdd-6cfb1fb1b597.png → 9713c534-6f51-45c7-a03c-1acb642c519c.png} +0 -0
  104. /kotonebot/kaa/sprites/{d5be0aac-6f00-4961-b21c-4075bd6ca528.png → 9a3c04af-7ba4-4520-a666-3045c1b3385c.png} +0 -0
  105. /kotonebot/kaa/sprites/{fcc71fcd-b28e-4247-beb6-6f5422218c54.png → 9acad6e8-8380-47c9-bac8-3144c9b7b765.png} +0 -0
  106. /kotonebot/kaa/sprites/{287ec12a-c1fb-4b8f-a77c-acc99821eabd.png → 9acf0817-ab1f-45e1-a26f-99c3c331a184.png} +0 -0
  107. /kotonebot/kaa/sprites/{10636534-51ee-4698-b582-e56751bebb4d.png → 9cc5a374-ca08-4fa9-a2b7-e1f65871962d.png} +0 -0
  108. /kotonebot/kaa/sprites/{a200b1e4-2ebc-4c15-bdf2-2575408877f8.png → 9ce465b3-b4a6-4646-a559-3088621a1da1.png} +0 -0
  109. /kotonebot/kaa/sprites/{96c79132-d55f-43d2-bdb3-6fe55734b6d5.png → 9cf406dc-bd69-4919-a396-d7e267b01645.png} +0 -0
  110. /kotonebot/kaa/sprites/{f3890caa-fa8b-43bc-ba30-82c5bbe1d12a.png → 9d61082b-7e07-4da2-9210-5744a2481da4.png} +0 -0
  111. /kotonebot/kaa/sprites/{6d59fa9e-b988-47e3-99b5-e06510f98e45.png → 9dc6ec60-597c-4305-b251-2e3342603446.png} +0 -0
  112. /kotonebot/kaa/sprites/{ef585824-7bfa-427a-a185-4317c0bcb4f6.png → 9f8332c7-95b4-41ec-8e7f-f5ece0a545e1.png} +0 -0
  113. /kotonebot/kaa/sprites/{e311e99e-ae64-442a-aed1-6fac29687d18.png → 9fa1e59d-36cb-43c9-a788-ed95ae93f3d0.png} +0 -0
  114. /kotonebot/kaa/sprites/{e9afeef0-fcbe-4d97-8b39-c57ab24a3f84.png → a5a16fb6-5513-4e17-b871-968425bfdf81.png} +0 -0
  115. /kotonebot/kaa/sprites/{aa42da27-2c6a-4731-9678-edd3aefde4a7.png → a9c016ed-463b-4e06-88ce-020c2b4dd981.png} +0 -0
  116. /kotonebot/kaa/sprites/{29fcf4cb-883f-475e-a68f-107cffc83f1c.png → a9e90b22-4415-44cf-bf2f-6acb2733312f.png} +0 -0
  117. /kotonebot/kaa/sprites/{dfab89de-7365-4bc8-b332-6f62733123a2.png → ab39be69-bf52-4250-8e38-25b04d1e6a87.png} +0 -0
  118. /kotonebot/kaa/sprites/{fa3bdcef-dfba-4cf2-a06f-e6078c07fb7d.png → ab52b70e-ca1f-47fe-aff8-0bfae7eeb8ff.png} +0 -0
  119. /kotonebot/kaa/sprites/{bf8d6419-472c-4941-8d69-9bb01af5c71a.png → ab823208-66f4-4a97-836b-024bf27b7c74.png} +0 -0
  120. /kotonebot/kaa/sprites/{79cddeac-828b-49a1-b860-b422e2c8d2ea.png → aec4ecf4-c1d7-424f-8acc-388ff286a360.png} +0 -0
  121. /kotonebot/kaa/sprites/{290aaff5-71eb-4d71-87db-3757d3e9794b.png → b144b5df-c3b5-4bda-bb3d-9c8fa1182080.png} +0 -0
  122. /kotonebot/kaa/sprites/{9895c28f-eba2-4e37-911b-6c0f05f7d72b.png → b1c80e35-8949-4425-8b96-1df803cacde5.png} +0 -0
  123. /kotonebot/kaa/sprites/{5aa47ea4-79de-4547-9320-cf8c614c7366.png → b28eac50-4517-4fc3-8fd9-a6a7f8d19ba5.png} +0 -0
  124. /kotonebot/kaa/sprites/{95962144-c639-4902-ad2d-be11ccc5eaab.png → b6da32be-5c6d-40a8-b1d0-15e0576c6f71.png} +0 -0
  125. /kotonebot/kaa/sprites/{c3548011-dc57-4542-a855-1e7f9d7762f7.png → b7bd78a1-aa4a-4847-8e9a-969989ef3cb3.png} +0 -0
  126. /kotonebot/kaa/sprites/{535db21f-b22e-4a05-a7e8-81e3664305b8.png → b7ee5425-c4ec-4030-9343-1737628b1936.png} +0 -0
  127. /kotonebot/kaa/sprites/{db3ab847-948d-4ee0-b5cb-c57c0caa24fd.png → bde3bbca-be39-494f-944a-f73582cd5f97.png} +0 -0
  128. /kotonebot/kaa/sprites/{2e3410a1-49b5-4f65-8f26-bb1df213c2b8.png → c0adda90-8b05-4a6b-b091-9d2c9d4b84f8.png} +0 -0
  129. /kotonebot/kaa/sprites/{aaa770da-fc42-4e4a-978c-8fef22c0ebf9.png → c14e3dd6-ffca-4011-b24d-da330162804d.png} +0 -0
  130. /kotonebot/kaa/sprites/{ec9656c3-a984-47db-8661-e1ae8751d288.png → c2841576-352b-41de-95d8-3f2640504c9c.png} +0 -0
  131. /kotonebot/kaa/sprites/{a718a6f9-db30-4a9c-9d2b-b83055cf36ae.png → c2d305cc-8fb4-4f34-a9b3-96862837a36b.png} +0 -0
  132. /kotonebot/kaa/sprites/{8d1a63f3-7ec4-405c-9d78-d176018389dc.png → c447f3cf-05b3-413d-9a50-f09a22b17e8d.png} +0 -0
  133. /kotonebot/kaa/sprites/{3efe8341-33bc-492e-8a0f-69a507502b43.png → c44a35b8-4254-4f4f-99a8-18a3195ae696.png} +0 -0
  134. /kotonebot/kaa/sprites/{5eaa9fa9-0bce-47ce-8f28-d5ba32c566c3.png → c673c1f3-2ac5-4fef-a9a2-203e67e1fd10.png} +0 -0
  135. /kotonebot/kaa/sprites/{5410568f-2e3c-49b2-8112-f43c52342298.png → c75bba52-b3a5-4565-bb45-104ebed9e3d2.png} +0 -0
  136. /kotonebot/kaa/sprites/{b4ede50d-7edb-4461-bee6-77d13456fa30.png → c85ba9aa-9ff1-42a4-b80a-ef39ab009e85.png} +0 -0
  137. /kotonebot/kaa/sprites/{85ca40d2-f02e-45a4-9db0-c483f6ae1db5.png → cd1f5c42-582e-408e-bb9f-08f7b868d9fc.png} +0 -0
  138. /kotonebot/kaa/sprites/{1f56fbc1-47f5-4dc3-b91b-6e49e4ea00dc.png → cde81597-2e0a-4795-910a-6e475d7cc073.png} +0 -0
  139. /kotonebot/kaa/sprites/{77b7b404-bc0c-4637-96b0-7344f782989e.png → cfd353f0-073f-462e-928b-3cda9344eec4.png} +0 -0
  140. /kotonebot/kaa/sprites/{afe94aea-47e2-4310-8e25-3e7cadc5a75d.png → d1b23182-244c-4e94-ac46-894b3117d1bb.png} +0 -0
  141. /kotonebot/kaa/sprites/{30bc31e4-40b3-4bcb-bb36-1dd5a8c59a32.png → d2bce7a9-8709-4042-a31a-1f07b2711637.png} +0 -0
  142. /kotonebot/kaa/sprites/{763968fd-f7ab-4a46-a0ef-6a496b21d3dd.png → d3a1c862-8f02-4aca-8b58-bbd337ab48bf.png} +0 -0
  143. /kotonebot/kaa/sprites/{bbee032e-7fc1-4b4d-b1db-cc54b24c20c8.png → d400ab2d-b4dc-43bb-bb77-f49c666bf4b1.png} +0 -0
  144. /kotonebot/kaa/sprites/{e8e25d3c-569e-4eae-a707-3afa8c5f46ec.png → d6182579-dc5d-4db9-a8be-0a7f3998abde.png} +0 -0
  145. /kotonebot/kaa/sprites/{50986ada-ff64-405f-911d-f6c3655fb658.png → d76bed23-33cf-4f86-bb01-add1185098a1.png} +0 -0
  146. /kotonebot/kaa/sprites/{ccba7903-9882-4982-ab84-355667d8419a.png → d7c2d507-640e-4705-92d0-d2e3951cc29b.png} +0 -0
  147. /kotonebot/kaa/sprites/{dbc449e9-404e-435b-8b0f-3c853c7f0efe.png → d9b23b65-6780-446b-950c-48ca668f838a.png} +0 -0
  148. /kotonebot/kaa/sprites/{3f6b5de5-c942-4ef1-8b04-5ee6859bb27b.png → ddb5b885-93de-49d1-8150-3235d702c1c8.png} +0 -0
  149. /kotonebot/kaa/sprites/{25797538-2dc6-436c-b64a-597ae6d5db6e.png → ddc4b13a-4a0f-46fd-8fcb-01100058f78a.png} +0 -0
  150. /kotonebot/kaa/sprites/{f2906fc0-9192-48ca-bc5d-52e922b04d8d.png → de804900-3470-478e-a51f-e3919b301326.png} +0 -0
  151. /kotonebot/kaa/sprites/{c46f1705-b4d5-4f39-b138-391a85fb0302.png → df11deb8-940d-45a3-89b7-48c814735448.png} +0 -0
  152. /kotonebot/kaa/sprites/{d79069c1-3b8e-4df7-8b14-4eeaa44241e1.png → e97c5043-a73e-4979-a529-34b4daaee88d.png} +0 -0
  153. /kotonebot/kaa/sprites/{725d6877-7260-4ca3-91d3-da4e9ccbf206.png → ed84a435-c52c-4294-ad80-bf3c63e2878d.png} +0 -0
  154. /kotonebot/kaa/sprites/{df004f6b-683d-41e8-848f-2a838c585f43.png → ee191a7a-ed3e-46e2-a07a-2ca7d566d0f6.png} +0 -0
  155. /kotonebot/kaa/sprites/{0c826d2e-41ce-474b-ad99-f4561baf03de.png → ef8b7148-cc8f-4a76-a981-68062909e5a9.png} +0 -0
  156. /kotonebot/kaa/sprites/{e0a34a9a-69b6-4732-9b1c-7a2c6445cb76.png → f2b30fe6-1a32-4f0f-98c1-478e90db1f1b.png} +0 -0
  157. /kotonebot/kaa/sprites/{c95ee1bb-1e53-4568-ba92-9606071ad3a6.png → fbea0ab6-3094-438e-807d-5a24d0d32cf3.png} +0 -0
  158. /kotonebot/kaa/sprites/{37f1d878-467f-4ba0-bc59-bb327797191b.png → fe9a7ad5-4506-4dfe-80a5-6f4bb9703f9c.png} +0 -0
  159. {ksaa-2025.7.27.0.dist-info → ksaa-2025.8.2.0.dist-info}/WHEEL +0 -0
  160. {ksaa-2025.7.27.0.dist-info → ksaa-2025.8.2.0.dist-info}/entry_points.txt +0 -0
  161. {ksaa-2025.7.27.0.dist-info → ksaa-2025.8.2.0.dist-info}/licenses/LICENSE +0 -0
  162. {ksaa-2025.7.27.0.dist-info → ksaa-2025.8.2.0.dist-info}/top_level.txt +0 -0
kotonebot/kaa/errors.py CHANGED
@@ -7,11 +7,18 @@ class KaaError(Exception):
7
7
 
8
8
  class KaaUserFriendlyError(UserFriendlyError, KaaError):
9
9
  def __init__(self, message: str, help_link: str):
10
+ self.message = message
11
+ """用户友好的错误信息"""
12
+ self.help_link = help_link
13
+ """此错误的帮助链接"""
10
14
  super().__init__(message, [
11
15
  (0, '打开帮助', lambda: os.startfile(help_link)),
12
16
  (1, '知道了', lambda: None)
13
17
  ])
14
18
 
19
+ def __str__(self):
20
+ return f'【发生错误】{self.message}。访问 {self.help_link} 以获取更多帮助。'
21
+
15
22
  class ProduceSolutionNotFoundError(KaaUserFriendlyError):
16
23
  def __init__(self, solution_id: str):
17
24
  self.solution_id = solution_id
@@ -36,3 +43,10 @@ class IdolCardNotFoundError(KaaUserFriendlyError):
36
43
  f'未找到 ID 为「{skin_id}」的偶像卡。请检查游戏内偶像皮肤与培育方案中偶像皮肤是否一致。',
37
44
  'https://kdocs.cn/l/cetCY8mGKHLj?linkname=cySASqoPGj'
38
45
  )
46
+
47
+ class LauncherNotFoundError(KaaUserFriendlyError):
48
+ def __init__(self):
49
+ super().__init__(
50
+ '未找到启动器「kaa.exe」,请确认是否正确放置在根目录。',
51
+ 'https://kdocs.cn/l/cetCY8mGKHLj?linkname=jpzb09rLTS'
52
+ )
kotonebot/kaa/main/cli.py CHANGED
@@ -21,6 +21,7 @@ psr.add_argument('-lp', '--log-path', default=None, help='Path to the log file.
21
21
  psr.add_argument('-ll', '--log-level', default='DEBUG', help='Log level. Default: DEBUG')
22
22
  psr.add_argument('--kill-dmm', action='store_true', default=False, help='Kill DMM Game Player when tasks are completed. Overrides config().end_game.kill_dmm')
23
23
  psr.add_argument('--kill-game', action='store_true', default=False, help='Kill gakumasu.exe when tasks are completed. Overrides config().end_game.kill_game')
24
+ psr.add_argument('--start-immidiately', action='store_true', default=False, help='Start tasks immediately after launching the UI. Only available when no subcommand is specified.')
24
25
 
25
26
  # 子命令
26
27
  subparsers = psr.add_subparsers(dest='subcommands', title='Subcommands')
@@ -119,7 +120,7 @@ def main():
119
120
  kaa().set_log_level(logging.DEBUG)
120
121
  kaa().add_file_logger(log_filename)
121
122
  from .gr import main as gr_main
122
- gr_main(kaa())
123
+ gr_main(kaa(), psr.parse_args().start_immidiately)
123
124
 
124
125
  if __name__ == '__main__':
125
126
  main()
kotonebot/kaa/main/gr.py CHANGED
@@ -30,6 +30,7 @@ from kotonebot.kaa.config import (
30
30
  RecommendCardDetectionMode, TraceConfig, StartGameConfig, EndGameConfig, UpgradeSupportCardConfig, MiscConfig,
31
31
  )
32
32
  from kotonebot.kaa.config.produce import ProduceSolution, ProduceSolutionManager, ProduceData
33
+ from kotonebot.kaa.application.adapter.misc_adapter import create_desktop_shortcut
33
34
 
34
35
  logger = logging.getLogger(__name__)
35
36
  GradioInput = gr.Textbox | gr.Number | gr.Checkbox | gr.Dropdown | gr.Radio | gr.Slider | gr.Tabs | gr.Tab
@@ -870,75 +871,102 @@ class KotoneBotUI:
870
871
 
871
872
  def _create_emulator_settings(self) -> ConfigBuilderReturnValue:
872
873
  gr.Markdown("### 模拟器设置")
873
- has_mumu12 = Mumu12Host.installed()
874
- has_leidian = LeidianHost.installed()
875
874
  current_tab = 0
876
875
 
877
876
  def _update_emulator_tab_options(impl_value: str, selected_index: int):
878
877
  nonlocal current_tab
879
878
  current_tab = selected_index
880
-
881
- # if selected_index == 3: # DMM
882
- # choices = ['windows', 'remote_windows']
883
- # else: # Mumu, Leidian, Custom
884
- # choices = ['adb', 'adb_raw', 'uiautomator2']
885
- # else:
886
- # raise ValueError(f'Unsupported backend type: {type_in_config}')
887
879
  choices = ['adb', 'adb_raw', 'uiautomator2', 'windows', 'remote_windows', 'nemu_ipc']
888
880
  if impl_value not in choices:
889
881
  new_value = choices[0]
890
882
  else:
891
883
  new_value = impl_value
892
-
893
884
  return gr.Dropdown(choices=choices, value=new_value)
894
885
 
895
886
  with gr.Tabs(selected=self.current_config.backend.type):
896
- with gr.Tab("MuMu 12", interactive=has_mumu12, id="mumu12") as tab_mumu12:
887
+ with gr.Tab("MuMu 12", id="mumu12") as tab_mumu12:
897
888
  gr.Markdown("已选中 MuMu 12 模拟器")
898
- if has_mumu12:
889
+ mumu_refresh_message = gr.Markdown("<div style='color: red;'>点击下方「刷新」按钮载入信息</div>", visible=True)
890
+ mumu_instance = gr.Dropdown(
891
+ label="选择多开实例",
892
+ choices=[],
893
+ interactive=True
894
+ )
895
+ mumu_refresh_btn = gr.Button("刷新")
896
+
897
+ def refresh_mumu_instances():
899
898
  try:
900
899
  instances = Mumu12Host.list()
901
900
  is_mumu12 = self.current_config.backend.type == 'mumu12'
902
- mumu_instance = gr.Dropdown(
903
- label="选择多开实例",
904
- value=self.current_config.backend.instance_id if is_mumu12 else None,
905
- choices=[(i.name, i.id) for i in instances],
906
- interactive=True
907
- )
908
- mumu_background_mode = gr.Checkbox(
909
- label="MuMu12 模拟器后台保活模式",
910
- value=self.current_config.backend.mumu_background_mode,
911
- info=BackendConfig.model_fields['mumu_background_mode'].description,
912
- interactive=True
913
- )
914
- except: # noqa: E722
901
+ current_id = self.current_config.backend.instance_id if is_mumu12 else None
902
+ choices = [(i.name, i.id) for i in instances]
903
+ return gr.Dropdown(choices=choices, value=current_id, interactive=True), gr.Markdown(visible=False)
904
+ except Exception as e:
915
905
  logger.exception('Failed to list installed MuMu12')
916
- gr.Markdown('获取 MuMu12 模拟器列表失败,请升级模拟器到最新版本。若问题依旧,前往 QQ 群、QQ 频道或 Github 反馈 bug。')
917
- mumu_instance = gr.Dropdown(visible=False)
918
- mumu_background_mode = gr.Checkbox(visible=False)
919
- else:
920
- # 为了让 return 收集组件时不报错
921
- mumu_instance = gr.Dropdown(visible=False)
922
- mumu_background_mode = gr.Checkbox(visible=False)
906
+ gr.Error("获取 MuMu12 模拟器列表失败,请升级模拟器到最新版本。若问题依旧,前往 QQ 群、QQ 频道或 Github 反馈 bug。")
907
+ return gr.Dropdown(choices=[], interactive=True), gr.Markdown(visible=True)
908
+
909
+ mumu_refresh_btn.click(
910
+ fn=refresh_mumu_instances,
911
+ outputs=[mumu_instance, mumu_refresh_message]
912
+ )
913
+
914
+ # 如果当前是 MuMu 模拟器且有配置的 instance_id,立即加载实例列表
915
+ if self.current_config.backend.type == 'mumu12' and self.current_config.backend.instance_id:
916
+ try:
917
+ instances = Mumu12Host.list()
918
+ choices = [(i.name, i.id) for i in instances]
919
+ mumu_instance.choices = choices
920
+ mumu_instance.value = self.current_config.backend.instance_id
921
+ mumu_refresh_message.visible = False
922
+ except Exception as e:
923
+ logger.exception('Failed to auto-load MuMu12 instances')
924
+
925
+ mumu_background_mode = gr.Checkbox(
926
+ label="MuMu12 模拟器后台保活模式",
927
+ value=self.current_config.backend.mumu_background_mode,
928
+ info=BackendConfig.model_fields['mumu_background_mode'].description,
929
+ interactive=True
930
+ )
923
931
 
924
- with gr.Tab("雷电", interactive=has_leidian, id="leidian") as tab_leidian:
932
+ with gr.Tab("雷电", id="leidian") as tab_leidian:
925
933
  gr.Markdown("已选中雷电模拟器")
926
- if has_leidian:
934
+ leidian_refresh_message = gr.Markdown("<div style='color: red;'>点击下方「刷新」按钮载入信息</div>", visible=True)
935
+ leidian_instance = gr.Dropdown(
936
+ label="选择多开实例",
937
+ choices=[],
938
+ interactive=True
939
+ )
940
+ leidian_refresh_btn = gr.Button("刷新")
941
+
942
+ def refresh_leidian_instances():
927
943
  try:
928
944
  instances = LeidianHost.list()
929
945
  is_leidian = self.current_config.backend.type == 'leidian'
930
- leidian_instance = gr.Dropdown(
931
- label="选择多开实例",
932
- value=self.current_config.backend.instance_id if is_leidian else None,
933
- choices=[(i.name, i.id) for i in instances],
934
- interactive=True
935
- )
936
- except: # noqa: E722
946
+ current_id = self.current_config.backend.instance_id if is_leidian else None
947
+ choices = [(i.name, i.id) for i in instances]
948
+ return gr.Dropdown(choices=choices, value=current_id, interactive=True), gr.Markdown(visible=False)
949
+ except Exception as e:
937
950
  logger.exception('Failed to list installed Leidian')
938
- gr.Markdown('获取雷电模拟器列表失败,请前往 QQ 群、QQ 频道或 Github 反馈 bug。')
939
- leidian_instance = gr.Dropdown(visible=False)
940
- else:
941
- leidian_instance = gr.Dropdown(visible=False)
951
+ gr.Error("获取雷电模拟器列表失败,请前往 QQ 群、QQ 频道或 Github 反馈 bug。")
952
+ return gr.Dropdown(choices=[], interactive=True), gr.Markdown(visible=True)
953
+
954
+ leidian_refresh_btn.click(
955
+ fn=refresh_leidian_instances,
956
+ outputs=[leidian_instance, leidian_refresh_message]
957
+ )
958
+
959
+ # 如果当前是雷电模拟器且有配置的 instance_id,立即加载实例列表
960
+ if self.current_config.backend.type == 'leidian' and self.current_config.backend.instance_id:
961
+ try:
962
+ instances = LeidianHost.list()
963
+ choices = [(i.name, i.id) for i in instances]
964
+ leidian_instance.choices = choices
965
+ leidian_instance.value = self.current_config.backend.instance_id
966
+ leidian_refresh_message.visible = False
967
+ except Exception as e:
968
+ logger.exception('Failed to auto-load Leidian instances')
969
+ # 保持显示刷新提示
942
970
 
943
971
  with gr.Tab("自定义", id="custom") as tab_custom:
944
972
  gr.Markdown("已选中自定义模拟器")
@@ -991,13 +1019,6 @@ class KotoneBotUI:
991
1019
  with gr.Tab("DMM", id="dmm") as tab_dmm:
992
1020
  gr.Markdown("已选中 DMM")
993
1021
 
994
- # type_in_config = self.current_config.backend.type
995
- # if type_in_config in ['dmm']:
996
- # choices = ['windows', 'remote_windows']
997
- # elif type_in_config in ['mumu12', 'leidian', 'custom']:
998
- # choices = ['adb', 'adb_raw', 'uiautomator2']
999
- # else:
1000
- # raise ValueError(f'Unsupported backend type: {type_in_config}')
1001
1022
  choices = ['adb', 'adb_raw', 'uiautomator2', 'windows', 'remote_windows', 'nemu_ipc']
1002
1023
  screenshot_impl = gr.Dropdown(
1003
1024
  choices=choices,
@@ -2224,6 +2245,15 @@ class KotoneBotUI:
2224
2245
  info=MiscConfig.model_fields['expose_to_lan'].description,
2225
2246
  interactive=True
2226
2247
  )
2248
+ with gr.Row():
2249
+ gr.Button("创建桌面快捷方式").click(
2250
+ fn=self._create_shortcut_button_click(False),
2251
+ outputs=[]
2252
+ )
2253
+ gr.Button("创建一键启动快捷方式").click(
2254
+ fn=self._create_shortcut_button_click(True),
2255
+ outputs=[]
2256
+ )
2227
2257
 
2228
2258
  def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
2229
2259
  config.misc.check_update = data['check_update']
@@ -2236,6 +2266,12 @@ class KotoneBotUI:
2236
2266
  'expose_to_lan': expose_to_lan
2237
2267
  }
2238
2268
 
2269
+ def _create_shortcut_button_click(self, start_immediately: bool) -> Callable[[], None]:
2270
+ def _inner():
2271
+ create_desktop_shortcut(start_immediately)
2272
+ gr.Success("快捷方式创建成功")
2273
+ return _inner
2274
+
2239
2275
  def _create_debug_settings(self) -> ConfigBuilderReturnValue:
2240
2276
  """调试设置:仅在调试时使用"""
2241
2277
  with gr.Column():
@@ -2661,11 +2697,14 @@ class KotoneBotUI:
2661
2697
 
2662
2698
  return app
2663
2699
 
2664
- def main(kaa: Kaa | None = None) -> None:
2700
+ def main(kaa: Kaa | None = None, start_immidiately: bool = False) -> None:
2665
2701
  kaa = kaa or Kaa('./config.json')
2666
2702
  ui = KotoneBotUI(kaa)
2667
2703
  app = ui.create_ui()
2668
2704
 
2705
+ if start_immidiately:
2706
+ ui.start_run()
2707
+
2669
2708
  server_name = "0.0.0.0" if ui.current_config.options.misc.expose_to_lan else "127.0.0.1"
2670
2709
  app.launch(inbrowser=True, show_error=True, server_name=server_name)
2671
2710
 
kotonebot/kaa/metadata.py CHANGED
@@ -1,6 +1,24 @@
1
1
  WHATS_NEW = """
2
2
  # 更新日志
3
3
  ## kaa
4
+ ### v2025.8.2.0
5
+ 脚本:
6
+ * [修复] 修复 DMM 版启动游戏提示找不到窗口的问题(#46e72c4)
7
+ * [重构] 将部分 while 循环用 Loop 类重写(#8c99955)
8
+
9
+ 界面:
10
+ * [新增] 模拟器列表懒加载(#0f18d36)
11
+ * [新增] 新增创建桌面快捷方式功能(#6640a21)
12
+ * [新增] 新增命令行参数 --start-immidiately(#c39dd79)
13
+
14
+ 启动器:
15
+ * [新增] 以管理员重启时跳过重复检查更新(#142d9ef)
16
+ * [新增] 启动器支持拖拽安装 whl 包(#11c75dc)
17
+
18
+ ### v2025.7.27.1
19
+ 脚本:
20
+ * [修复] 修复检测培育阶段函数过早返回的问题(#de1328c)
21
+
4
22
  ### v2025.7.27.0
5
23
  脚本:
6
24
  * [修复] 修复竞赛总是卡在跳过页面(#738ec9e)
Binary file
Binary file