ksaa 2025.7.27.1__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.
- kotonebot/__init__.py +2 -1
- kotonebot/backend/loop.py +276 -276
- kotonebot/interop/win/shortcut.py +43 -0
- kotonebot/kaa/application/adapter/misc_adapter.py +5 -0
- kotonebot/kaa/application/core/misc_core.py +33 -0
- kotonebot/kaa/errors.py +14 -0
- kotonebot/kaa/main/cli.py +2 -1
- kotonebot/kaa/main/gr.py +92 -53
- kotonebot/kaa/metadata.py +14 -0
- kotonebot/kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
- kotonebot/kaa/resources/game.db +0 -0
- kotonebot/kaa/resources/game_ver.txt +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-3-010_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-3-010_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-012_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-012_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-011_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-011_1.png +0 -0
- kotonebot/kaa/tasks/R.py +126 -126
- kotonebot/kaa/tasks/actions/scenes.py +4 -10
- kotonebot/kaa/tasks/daily/capsule_toys.py +3 -4
- kotonebot/kaa/tasks/daily/contest.py +3 -7
- kotonebot/kaa/tasks/daily/mission_reward.py +13 -10
- kotonebot/kaa/tasks/daily/purchase.py +13 -11
- kotonebot/kaa/tasks/produce/cards.py +3 -8
- kotonebot/kaa/tasks/produce/common.py +3 -9
- kotonebot/kaa/tasks/produce/in_purodyuusu.py +93 -81
- kotonebot/kaa/tasks/produce/non_lesson_actions.py +35 -27
- kotonebot/kaa/tasks/produce/produce.py +18 -18
- kotonebot/kaa/tasks/start_game.py +4 -9
- {ksaa-2025.7.27.1.dist-info → ksaa-2025.8.2.0.dist-info}/METADATA +1 -1
- {ksaa-2025.7.27.1.dist-info → ksaa-2025.8.2.0.dist-info}/RECORD +162 -153
- /kotonebot/kaa/sprites/{52ae79ea-f4a4-4c19-9fe8-327f285ace1e.png → 01e8e85e-056c-4428-9cb2-4024c4e6d022.png} +0 -0
- /kotonebot/kaa/sprites/{d94ce829-a7ab-44aa-bc0c-a4801b650088.png → 0300702d-1023-4af7-9fee-54c058f7f1a8.png} +0 -0
- /kotonebot/kaa/sprites/{7e614cff-b492-4c4d-bbfe-0853ff65fcec.png → 0450fdf0-f03d-4efc-b047-27532571c620.png} +0 -0
- /kotonebot/kaa/sprites/{9a0c8f11-33f0-4c53-a911-556f3481d952.png → 065cbac0-e09a-4bec-aa10-5fdb41720d31.png} +0 -0
- /kotonebot/kaa/sprites/{3cd5382a-a679-4f06-ab83-6328a943148d.png → 1193a4e3-4d0d-4433-97ce-b19aeb6846c5.png} +0 -0
- /kotonebot/kaa/sprites/{a66625f6-f80c-48e4-a344-e48036085e2b.png → 133ea490-fefe-4785-b531-3cc7072338da.png} +0 -0
- /kotonebot/kaa/sprites/{6d225f8d-efc0-42a5-93af-7b81e24377c5.png → 14cd7285-f587-49af-9960-802c41050201.png} +0 -0
- /kotonebot/kaa/sprites/{7c7cbe5a-37f0-4cf3-8376-4ceeb7a662b0.png → 1564ee9a-c2eb-4284-b22a-dd8df7c8a32f.png} +0 -0
- /kotonebot/kaa/sprites/{dc64e856-2f31-48b1-b17d-32b499f819ce.png → 180b211b-3b77-43a9-b550-6624f1b1beb1.png} +0 -0
- /kotonebot/kaa/sprites/{aab26578-b548-41e5-8996-40ef821ca041.png → 19060076-f971-411c-9b1b-f22e18871b74.png} +0 -0
- /kotonebot/kaa/sprites/{e049018e-9d2b-4537-add1-e902cf8ac69a.png → 190c0a4a-24c2-4717-8a78-ffa7bb0366d2.png} +0 -0
- /kotonebot/kaa/sprites/{14283368-d85d-458a-8f2c-b112bd02256e.png → 1935d9dc-84ff-47a8-a65b-a458a224b4cc.png} +0 -0
- /kotonebot/kaa/sprites/{5ba7d61f-282d-4ad0-881a-842c26e7f66c.png → 1c0c3381-4d9b-4279-ac89-784b9e9d7e63.png} +0 -0
- /kotonebot/kaa/sprites/{0f986eac-1e3c-48ed-9850-cae529b30503.png → 1ec343a7-f6d4-4ab5-967b-66f900438977.png} +0 -0
- /kotonebot/kaa/sprites/{bba3cd68-3023-4a7b-9fe9-36ec7adbfc89.png → 203dfb12-640e-4437-9040-47045c9b8cbd.png} +0 -0
- /kotonebot/kaa/sprites/{f957fbb8-ba30-47c0-97b8-ff531d6e3831.png → 22394de7-f95b-4001-a961-d854c34f1d8c.png} +0 -0
- /kotonebot/kaa/sprites/{efb31647-3760-4b76-8b5d-ec4b5fb7a975.png → 248f9401-c340-474f-baed-1a523f441f3e.png} +0 -0
- /kotonebot/kaa/sprites/{c2e3d6ac-00b6-4d2a-a30b-52a1190f5f05.png → 2a317f0e-613e-48c4-9def-d18a3b834254.png} +0 -0
- /kotonebot/kaa/sprites/{7fcc8f4c-9d06-4747-8c1e-aaba3a61cc0e.png → 2b225eb3-c1b2-415a-99de-1a41a0ed4470.png} +0 -0
- /kotonebot/kaa/sprites/{7dfdefa7-d95f-4348-9e0b-640ed17e138f.png → 2d59f524-840a-445f-b432-c97051eb7043.png} +0 -0
- /kotonebot/kaa/sprites/{76acc2b6-6649-4b1a-bd52-18ab9a2341d0.png → 327733fe-e68a-4f96-9e42-2b16629cbf8a.png} +0 -0
- /kotonebot/kaa/sprites/{e62afa2c-1c5b-426e-8ff1-ea51f75d0f20.png → 343d630f-375f-496a-98c5-75a1e0aa2c2c.png} +0 -0
- /kotonebot/kaa/sprites/{8938249c-94d3-4f20-8013-85d481a54d87.png → 356f4aa8-ebc5-4edc-9724-badf6d02d61e.png} +0 -0
- /kotonebot/kaa/sprites/{39882ba6-c9d9-4742-b92d-206781c5f60e.png → 39a5eb7d-0ece-4eca-bf0e-4bf2f8faf1e2.png} +0 -0
- /kotonebot/kaa/sprites/{ee8a6029-63b3-4c13-bdc5-9bd8546d3316.png → 39ab37d4-2654-4102-ba75-17d6bbd79673.png} +0 -0
- /kotonebot/kaa/sprites/{88e4e3c6-3f6b-4192-83c7-4b20a51ad53a.png → 3ac2cb20-6563-4505-85bc-1fd3b93902a3.png} +0 -0
- /kotonebot/kaa/sprites/{f93c7a24-157d-43ef-adcc-3873d313c6d7.png → 3fa41725-c619-4ed8-811c-c6f0e9366126.png} +0 -0
- /kotonebot/kaa/sprites/{d77a936b-c0ae-4dbd-8b44-82288a0957d6.png → 43c175e2-7e7e-405a-8c92-0cf3d7400d12.png} +0 -0
- /kotonebot/kaa/sprites/{3bd19f01-57f8-4f8b-98b7-b5dd0779f77d.png → 44d9cfe6-742c-46de-8f53-4f49babfabcc.png} +0 -0
- /kotonebot/kaa/sprites/{3e558d01-1d7d-4ed3-9200-738252539dc1.png → 4a395a76-b1b6-4541-97b0-2e2603d47360.png} +0 -0
- /kotonebot/kaa/sprites/{2585cb7b-af94-46ac-a31d-f50bd09f40a6.png → 50ca8582-8787-45ff-a6b6-e1f0e8b44cb5.png} +0 -0
- /kotonebot/kaa/sprites/{31745cd7-226e-4e11-b96d-2e202a7097e7.png → 52e0b7fe-271f-4713-b1b3-b06a286630d7.png} +0 -0
- /kotonebot/kaa/sprites/{ebb662bb-62b4-404c-bb8f-4a7d5feccaa8.png → 55e853dd-07bc-4086-8a2d-60d24ff75839.png} +0 -0
- /kotonebot/kaa/sprites/{34dcd41c-b800-43b4-b24f-c569bae59db2.png → 57c8fe6f-e970-4364-9359-9c273ca37b85.png} +0 -0
- /kotonebot/kaa/sprites/{6c151fbe-7cf9-4629-b47a-da7be835bb4b.png → 58cbe76f-7cab-490d-8668-1076e76d9e9f.png} +0 -0
- /kotonebot/kaa/sprites/{749bd918-8dfb-4393-bf91-b39e285f1d75.png → 58f1212f-a307-4179-a55c-8449e237cb3d.png} +0 -0
- /kotonebot/kaa/sprites/{7e4a2554-c05b-458f-b31f-ac6930e8078e.png → 5ac654b1-f891-46b4-a4b2-3b8f9a60a02b.png} +0 -0
- /kotonebot/kaa/sprites/{f7a4208f-0373-4f26-907f-84c3f2b810fc.png → 5b94cf27-4aa0-4de1-a9f2-ba8f5ca790fd.png} +0 -0
- /kotonebot/kaa/sprites/{ff5a0417-229f-41bd-8121-708b08417114.png → 5bf54b6d-d2b6-4211-b3f4-0713b84dd315.png} +0 -0
- /kotonebot/kaa/sprites/{81fec353-ad18-4223-9ea3-8d128a4a3e77.png → 5c2e3a85-838c-41d5-b55e-b62fc1b95a1e.png} +0 -0
- /kotonebot/kaa/sprites/{d0881e29-6da6-4823-b65c-eefa9f9f2208.png → 5da76978-7dc4-4d4e-8e4c-e3189e2c2b07.png} +0 -0
- /kotonebot/kaa/sprites/{3ace2c73-cf00-4706-9aac-1a0229b1b3f5.png → 5f1e618b-a1fc-41c6-9b05-f2a76c38feb5.png} +0 -0
- /kotonebot/kaa/sprites/{8ed3eab8-779b-4b66-bc24-06b0b1dfac18.png → 6006a923-8f9b-4dfc-aa81-1e4672db6908.png} +0 -0
- /kotonebot/kaa/sprites/{6597b7fd-3c5b-442f-a327-d18b555de544.png → 63a3a9ca-aff2-428a-8df2-9a0ed4e398c6.png} +0 -0
- /kotonebot/kaa/sprites/{5f3937f7-a5de-4a11-bcf9-da586596bf47.png → 644a3f8a-6b32-4c3e-9701-acb426502f81.png} +0 -0
- /kotonebot/kaa/sprites/{9f2a6935-f462-4726-b56e-8cf23aae3982.png → 66cc412b-a4a1-4b42-89b4-7653eef41204.png} +0 -0
- /kotonebot/kaa/sprites/{6468ab50-2d25-4b18-b555-2a56397968b0.png → 6770f2b1-1619-4937-bf8d-284b90a5d3c6.png} +0 -0
- /kotonebot/kaa/sprites/{2d902d81-5500-4265-9867-c5c4cac573d7.png → 6b2bd35a-d399-4486-b4ef-24abb3e6669f.png} +0 -0
- /kotonebot/kaa/sprites/{a1791427-52af-4d1e-8e95-e0533cb66d3c.png → 70a0da32-7fe7-41a9-9fc1-265764a0b125.png} +0 -0
- /kotonebot/kaa/sprites/{661d0e8d-379d-401d-9f29-147e70123adf.png → 727c2d86-0daf-47d3-8eb4-500e648abfd6.png} +0 -0
- /kotonebot/kaa/sprites/{80c6d473-1eb2-4d65-8e8d-8f267ab61cd9.png → 72ea8e77-8773-47bf-9c5f-bf51812065cd.png} +0 -0
- /kotonebot/kaa/sprites/{116bf963-ad4a-401a-91f7-e3a56a4848b9.png → 73c270f5-055a-4cc3-9036-c95321faec4a.png} +0 -0
- /kotonebot/kaa/sprites/{a2d9b907-f68e-47c7-8aa6-31c07c272d94.png → 74423820-b24e-4dd1-b6c4-7ef3d6aa3b8c.png} +0 -0
- /kotonebot/kaa/sprites/{bd04472b-eeeb-4ad7-b385-8347b7053887.png → 74d02db5-a02d-43d0-ae7a-5aeba90249be.png} +0 -0
- /kotonebot/kaa/sprites/{c8f444cc-e809-44c2-86a3-3cbb5bcd0356.png → 76e3c1b4-cd2f-47f1-96bf-9b86a84aa24c.png} +0 -0
- /kotonebot/kaa/sprites/{eec4d7d6-3084-4bab-99c1-10e3a9459393.png → 77c9d69b-1078-477f-897f-c50bc5013fd5.png} +0 -0
- /kotonebot/kaa/sprites/{29fc852e-4c61-416d-80ff-f28c5a64abc1.png → 785837db-1da3-46d0-866f-017c232547ad.png} +0 -0
- /kotonebot/kaa/sprites/{9b439501-e57d-4912-9f57-67c4534060f7.png → 7c6dd46a-62ff-4d2c-b04a-df97ba55ed74.png} +0 -0
- /kotonebot/kaa/sprites/{f88f9f3b-e0e7-498c-ad1c-e92a719164f3.png → 876ec159-fc25-4c97-9c37-e3ffaba7618b.png} +0 -0
- /kotonebot/kaa/sprites/{566e641a-a364-415c-a17b-2db7862f2714.png → 88e9493c-0914-489a-9d99-addff4f0efd0.png} +0 -0
- /kotonebot/kaa/sprites/{3d7d1e3f-29c7-431d-8621-3f31b8880492.png → 891d4f63-df7f-462c-8908-ff4380c91b8b.png} +0 -0
- /kotonebot/kaa/sprites/{61f56d51-8d30-4aed-857a-8eff6fab27c1.png → 8cd02d5b-96f7-4b59-8676-ca07a63a7693.png} +0 -0
- /kotonebot/kaa/sprites/{c370b930-9750-4782-9564-5ce4cd609bdd.png → 8fb0f6d1-388b-41b3-964b-5965c58605c7.png} +0 -0
- /kotonebot/kaa/sprites/{adc38fcc-84d2-4f7c-846d-4fe96dd5d08a.png → 8fc97425-3b86-42cd-820d-2ad6321508f3.png} +0 -0
- /kotonebot/kaa/sprites/{093c3fb8-036e-4cf4-917b-d70cabebf571.png → 9169b74f-7458-4562-bc90-41efe0edfc22.png} +0 -0
- /kotonebot/kaa/sprites/{15ee94ce-1930-4eff-9ce2-0ebe947aaa05.png → 929d1dc7-6f9e-444b-9b57-ab8baacfe524.png} +0 -0
- /kotonebot/kaa/sprites/{252f1cd3-8e09-4b34-b5ba-47b1137a19c1.png → 92d4209d-5053-4284-a9f5-63372c8cd05b.png} +0 -0
- /kotonebot/kaa/sprites/{4de619fd-ed06-4210-b1f0-11556deb4dd9.png → 9552c822-a654-46a8-acd9-0320a4b6118b.png} +0 -0
- /kotonebot/kaa/sprites/{d32f8851-4fd2-4484-8ae8-66a375a43f3d.png → 969ddfa4-c0c8-41c8-b51b-40febf152c7a.png} +0 -0
- /kotonebot/kaa/sprites/{a7e31af5-a896-47bb-af4b-e71936ac6334.png → 96b9b3cb-7131-46ba-a193-f46446f72194.png} +0 -0
- /kotonebot/kaa/sprites/{eea2af85-94b2-4c41-8f51-393059dcc43c.png → 9713c534-6f51-45c7-a03c-1acb642c519c.png} +0 -0
- /kotonebot/kaa/sprites/{b5a58c56-3f09-47e5-ab61-57bab752e735.png → 9a3c04af-7ba4-4520-a666-3045c1b3385c.png} +0 -0
- /kotonebot/kaa/sprites/{464c3d3a-c772-4f85-94d5-970f46c8d213.png → 9acad6e8-8380-47c9-bac8-3144c9b7b765.png} +0 -0
- /kotonebot/kaa/sprites/{ac0b1f47-ce60-479a-9c5d-d8ced42ec0e0.png → 9acf0817-ab1f-45e1-a26f-99c3c331a184.png} +0 -0
- /kotonebot/kaa/sprites/{7dcc9134-9e5f-433b-ae5c-7530484f3f5f.png → 9cc5a374-ca08-4fa9-a2b7-e1f65871962d.png} +0 -0
- /kotonebot/kaa/sprites/{ddc8f913-e9ae-46dc-a91a-d3ee79e9f32d.png → 9ce465b3-b4a6-4646-a559-3088621a1da1.png} +0 -0
- /kotonebot/kaa/sprites/{75cad2af-b8c5-4f5f-8398-acd90eb4348e.png → 9cf406dc-bd69-4919-a396-d7e267b01645.png} +0 -0
- /kotonebot/kaa/sprites/{66c7e6df-5c90-4b3a-9b51-78cff1357ed7.png → 9d61082b-7e07-4da2-9210-5744a2481da4.png} +0 -0
- /kotonebot/kaa/sprites/{e7a0ea00-2a72-4d74-8664-53726e3e1078.png → 9dc6ec60-597c-4305-b251-2e3342603446.png} +0 -0
- /kotonebot/kaa/sprites/{967b207a-79bb-479a-b50e-b2a04cf7ed54.png → 9f8332c7-95b4-41ec-8e7f-f5ece0a545e1.png} +0 -0
- /kotonebot/kaa/sprites/{96b12d02-c634-4e9c-a465-7ee61d5fc0bd.png → 9fa1e59d-36cb-43c9-a788-ed95ae93f3d0.png} +0 -0
- /kotonebot/kaa/sprites/{f03739ee-31e1-40ca-9aaf-6c0447d426a4.png → a5a16fb6-5513-4e17-b871-968425bfdf81.png} +0 -0
- /kotonebot/kaa/sprites/{a148b768-8c8d-4fee-b29f-11d73240a3d0.png → a9c016ed-463b-4e06-88ce-020c2b4dd981.png} +0 -0
- /kotonebot/kaa/sprites/{8cbbfa8e-17aa-42e7-92f7-319a02c8f7fa.png → a9e90b22-4415-44cf-bf2f-6acb2733312f.png} +0 -0
- /kotonebot/kaa/sprites/{05903cc9-9f7a-43ac-88e4-988a68311e05.png → ab39be69-bf52-4250-8e38-25b04d1e6a87.png} +0 -0
- /kotonebot/kaa/sprites/{a6bd2250-81b5-4f54-b6d9-bf9a5a4876d1.png → ab52b70e-ca1f-47fe-aff8-0bfae7eeb8ff.png} +0 -0
- /kotonebot/kaa/sprites/{acff3d83-f570-4c65-9bb3-db69cd525262.png → ab823208-66f4-4a97-836b-024bf27b7c74.png} +0 -0
- /kotonebot/kaa/sprites/{d0ad5222-0ee0-412e-819f-3217f9fd854b.png → aec4ecf4-c1d7-424f-8acc-388ff286a360.png} +0 -0
- /kotonebot/kaa/sprites/{ff361c63-3f3d-48df-a26f-7698bd459219.png → b144b5df-c3b5-4bda-bb3d-9c8fa1182080.png} +0 -0
- /kotonebot/kaa/sprites/{dd5ffd48-2ab0-4795-8193-8a8310101574.png → b1c80e35-8949-4425-8b96-1df803cacde5.png} +0 -0
- /kotonebot/kaa/sprites/{360bcb7f-c710-49d5-9942-2812ed03a447.png → b28eac50-4517-4fc3-8fd9-a6a7f8d19ba5.png} +0 -0
- /kotonebot/kaa/sprites/{f23cb531-18b5-4852-bb11-56dc621e56cc.png → b6da32be-5c6d-40a8-b1d0-15e0576c6f71.png} +0 -0
- /kotonebot/kaa/sprites/{31122061-ea7a-419e-8072-8552013a8255.png → b7bd78a1-aa4a-4847-8e9a-969989ef3cb3.png} +0 -0
- /kotonebot/kaa/sprites/{a3d5b052-526f-45ef-a2ed-5bba8ca9e4b1.png → b7ee5425-c4ec-4030-9343-1737628b1936.png} +0 -0
- /kotonebot/kaa/sprites/{d5a9d7f7-a065-4ff3-ae4c-b027f348ef54.png → bde3bbca-be39-494f-944a-f73582cd5f97.png} +0 -0
- /kotonebot/kaa/sprites/{28e5138d-bcd4-40d2-9e2f-0c845004b8ae.png → c0adda90-8b05-4a6b-b091-9d2c9d4b84f8.png} +0 -0
- /kotonebot/kaa/sprites/{1f5f5454-eb1c-45c3-8467-80c224d528e6.png → c14e3dd6-ffca-4011-b24d-da330162804d.png} +0 -0
- /kotonebot/kaa/sprites/{3ea31c2c-1421-421c-a7fa-7994c06e4bca.png → c2841576-352b-41de-95d8-3f2640504c9c.png} +0 -0
- /kotonebot/kaa/sprites/{2a539cb4-827f-449b-9780-14a94678948b.png → c2d305cc-8fb4-4f34-a9b3-96862837a36b.png} +0 -0
- /kotonebot/kaa/sprites/{7a8c4af3-2ac1-4295-b844-350ad00f2c50.png → c447f3cf-05b3-413d-9a50-f09a22b17e8d.png} +0 -0
- /kotonebot/kaa/sprites/{fbbf4921-ece5-4dc0-875d-8f7182596d4f.png → c44a35b8-4254-4f4f-99a8-18a3195ae696.png} +0 -0
- /kotonebot/kaa/sprites/{ad9cc197-c83d-4d39-b187-7105cde60ef5.png → c673c1f3-2ac5-4fef-a9a2-203e67e1fd10.png} +0 -0
- /kotonebot/kaa/sprites/{47f4b0a5-5792-4e82-b597-d58ea0b1f494.png → c75bba52-b3a5-4565-bb45-104ebed9e3d2.png} +0 -0
- /kotonebot/kaa/sprites/{1c14e581-b664-488c-9d29-f5228ee6d328.png → c85ba9aa-9ff1-42a4-b80a-ef39ab009e85.png} +0 -0
- /kotonebot/kaa/sprites/{1d457687-ff10-41b0-95e1-6c1b3868b2a0.png → cd1f5c42-582e-408e-bb9f-08f7b868d9fc.png} +0 -0
- /kotonebot/kaa/sprites/{432df4be-4970-4ac0-8465-a698bce6fe65.png → cde81597-2e0a-4795-910a-6e475d7cc073.png} +0 -0
- /kotonebot/kaa/sprites/{6a033af8-222c-459a-9ab9-a9a69b27822d.png → cfd353f0-073f-462e-928b-3cda9344eec4.png} +0 -0
- /kotonebot/kaa/sprites/{04c9d1c8-09b9-402d-b688-796253fdaf0c.png → d1b23182-244c-4e94-ac46-894b3117d1bb.png} +0 -0
- /kotonebot/kaa/sprites/{4ced1b5f-bbd2-4230-8555-233d082f4d05.png → d2bce7a9-8709-4042-a31a-1f07b2711637.png} +0 -0
- /kotonebot/kaa/sprites/{eb67d908-13f8-4cef-9a86-9770e342ab77.png → d3a1c862-8f02-4aca-8b58-bbd337ab48bf.png} +0 -0
- /kotonebot/kaa/sprites/{60cfef80-cd08-4205-8088-8d0b22a59b5a.png → d400ab2d-b4dc-43bb-bb77-f49c666bf4b1.png} +0 -0
- /kotonebot/kaa/sprites/{f08044bf-8a33-4d6b-8791-94470678efa6.png → d6182579-dc5d-4db9-a8be-0a7f3998abde.png} +0 -0
- /kotonebot/kaa/sprites/{e25468f5-929a-4a49-a2e0-4527075353b5.png → d76bed23-33cf-4f86-bb01-add1185098a1.png} +0 -0
- /kotonebot/kaa/sprites/{03821ecf-fdd2-4e89-8249-fc7288ac79be.png → d7c2d507-640e-4705-92d0-d2e3951cc29b.png} +0 -0
- /kotonebot/kaa/sprites/{7b552e56-0065-45d8-a0dc-bfe3be62b91f.png → d9b23b65-6780-446b-950c-48ca668f838a.png} +0 -0
- /kotonebot/kaa/sprites/{d6235144-ce78-4884-88b4-d1a12b76155f.png → ddb5b885-93de-49d1-8150-3235d702c1c8.png} +0 -0
- /kotonebot/kaa/sprites/{b92c4308-3778-47aa-8a0b-222d32721beb.png → ddc4b13a-4a0f-46fd-8fcb-01100058f78a.png} +0 -0
- /kotonebot/kaa/sprites/{4c444aaf-a2d1-44f1-aacc-b737f262a746.png → de804900-3470-478e-a51f-e3919b301326.png} +0 -0
- /kotonebot/kaa/sprites/{c157661d-de06-4e34-bc3b-7d79c987e26d.png → df11deb8-940d-45a3-89b7-48c814735448.png} +0 -0
- /kotonebot/kaa/sprites/{5033ca17-1327-4554-b939-968b8a78f10a.png → e97c5043-a73e-4979-a529-34b4daaee88d.png} +0 -0
- /kotonebot/kaa/sprites/{1b2a0de3-34cc-42b2-8af3-bfeb8d0d679c.png → ed84a435-c52c-4294-ad80-bf3c63e2878d.png} +0 -0
- /kotonebot/kaa/sprites/{2c2ff5ed-3b1a-4dcc-89a9-9457908cb184.png → ee191a7a-ed3e-46e2-a07a-2ca7d566d0f6.png} +0 -0
- /kotonebot/kaa/sprites/{e54b7482-a348-4252-a373-2ee69b3805b5.png → ef8b7148-cc8f-4a76-a981-68062909e5a9.png} +0 -0
- /kotonebot/kaa/sprites/{c84eada8-ff68-4d73-802b-6de88e73ec6d.png → f2b30fe6-1a32-4f0f-98c1-478e90db1f1b.png} +0 -0
- /kotonebot/kaa/sprites/{5a0d6f90-3758-4baa-94fc-a4a412284628.png → fbea0ab6-3094-438e-807d-5a24d0d32cf3.png} +0 -0
- /kotonebot/kaa/sprites/{36e02aa6-f858-4248-b39e-e16686d6baf1.png → fe9a7ad5-4506-4dfe-80a5-6f4bb9703f9c.png} +0 -0
- {ksaa-2025.7.27.1.dist-info → ksaa-2025.8.2.0.dist-info}/WHEEL +0 -0
- {ksaa-2025.7.27.1.dist-info → ksaa-2025.8.2.0.dist-info}/entry_points.txt +0 -0
- {ksaa-2025.7.27.1.dist-info → ksaa-2025.8.2.0.dist-info}/licenses/LICENSE +0 -0
- {ksaa-2025.7.27.1.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",
|
|
887
|
+
with gr.Tab("MuMu 12", id="mumu12") as tab_mumu12:
|
|
897
888
|
gr.Markdown("已选中 MuMu 12 模拟器")
|
|
898
|
-
|
|
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
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
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.
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
mumu_instance
|
|
922
|
-
|
|
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("雷电",
|
|
932
|
+
with gr.Tab("雷电", id="leidian") as tab_leidian:
|
|
925
933
|
gr.Markdown("已选中雷电模拟器")
|
|
926
|
-
|
|
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
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
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.
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
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,20 @@
|
|
|
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
|
+
|
|
4
18
|
### v2025.7.27.1
|
|
5
19
|
脚本:
|
|
6
20
|
* [修复] 修复检测培育阶段函数过早返回的问题(#de1328c)
|
|
Binary file
|
kotonebot/kaa/resources/game.db
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|