ksaa 2025.7.27.1__py3-none-any.whl → 2025.8.17.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/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 +97 -76
- kotonebot/kaa/metadata.py +26 -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-fktn-3-013_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-013_1.png +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 +22 -13
- 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.17.0.dist-info}/METADATA +1 -1
- {ksaa-2025.7.27.1.dist-info → ksaa-2025.8.17.0.dist-info}/RECORD +163 -152
- /kotonebot/kaa/sprites/{4ced1b5f-bbd2-4230-8555-233d082f4d05.png → 00a2e0d4-1683-4c36-88df-081673e2fe1a.png} +0 -0
- /kotonebot/kaa/sprites/{093c3fb8-036e-4cf4-917b-d70cabebf571.png → 07578d0c-15d4-42a2-9db1-a1c0c11b55c1.png} +0 -0
- /kotonebot/kaa/sprites/{9f2a6935-f462-4726-b56e-8cf23aae3982.png → 079cdbed-7171-42e3-8298-9d1e180982ec.png} +0 -0
- /kotonebot/kaa/sprites/{31122061-ea7a-419e-8072-8552013a8255.png → 07c5517b-38f7-44e6-8506-84317ba0fb86.png} +0 -0
- /kotonebot/kaa/sprites/{ddc8f913-e9ae-46dc-a91a-d3ee79e9f32d.png → 07d78d3e-4e79-459e-9c41-43f4a618f9e9.png} +0 -0
- /kotonebot/kaa/sprites/{14283368-d85d-458a-8f2c-b112bd02256e.png → 0899e636-b767-45e6-ab63-258d19d3f806.png} +0 -0
- /kotonebot/kaa/sprites/{f23cb531-18b5-4852-bb11-56dc621e56cc.png → 0b27cdd2-490b-4a6a-ae0d-788ac1601dcc.png} +0 -0
- /kotonebot/kaa/sprites/{5033ca17-1327-4554-b939-968b8a78f10a.png → 0b947c81-0ab1-40a8-8c26-26258be572c7.png} +0 -0
- /kotonebot/kaa/sprites/{a66625f6-f80c-48e4-a344-e48036085e2b.png → 0da004d8-2cc5-43ab-9ac1-94d4f74dd37d.png} +0 -0
- /kotonebot/kaa/sprites/{4c444aaf-a2d1-44f1-aacc-b737f262a746.png → 0de1fa4d-3621-4671-9e1f-b8ed1e767adc.png} +0 -0
- /kotonebot/kaa/sprites/{f957fbb8-ba30-47c0-97b8-ff531d6e3831.png → 0e998848-beb2-4d31-9019-6afab9e0180e.png} +0 -0
- /kotonebot/kaa/sprites/{5f3937f7-a5de-4a11-bcf9-da586596bf47.png → 0ef0615f-f293-4a4e-93ac-985b3a17c8d7.png} +0 -0
- /kotonebot/kaa/sprites/{d0881e29-6da6-4823-b65c-eefa9f9f2208.png → 1135ed8d-4e1c-4896-9d6d-5c2ba3d29761.png} +0 -0
- /kotonebot/kaa/sprites/{116bf963-ad4a-401a-91f7-e3a56a4848b9.png → 12b811a3-5b37-4510-9ebd-95455644f253.png} +0 -0
- /kotonebot/kaa/sprites/{29fc852e-4c61-416d-80ff-f28c5a64abc1.png → 130ee78a-c201-4fa0-bac5-7be0b842312d.png} +0 -0
- /kotonebot/kaa/sprites/{ac0b1f47-ce60-479a-9c5d-d8ced42ec0e0.png → 1339693d-6e77-4058-921a-9079c8eb5a9a.png} +0 -0
- /kotonebot/kaa/sprites/{acff3d83-f570-4c65-9bb3-db69cd525262.png → 141b5f13-489d-4271-ac49-4d0bd40bf8fc.png} +0 -0
- /kotonebot/kaa/sprites/{36e02aa6-f858-4248-b39e-e16686d6baf1.png → 14488bad-1e16-47b8-9870-f2e18c6b87ee.png} +0 -0
- /kotonebot/kaa/sprites/{1b2a0de3-34cc-42b2-8af3-bfeb8d0d679c.png → 1466ba09-8e27-49cd-8606-f9feeecc2915.png} +0 -0
- /kotonebot/kaa/sprites/{c157661d-de06-4e34-bc3b-7d79c987e26d.png → 15ce2944-3d27-4073-b969-2ec8fc98ceb4.png} +0 -0
- /kotonebot/kaa/sprites/{80c6d473-1eb2-4d65-8e8d-8f267ab61cd9.png → 1777dfb5-2793-4037-9da7-f789cf65896e.png} +0 -0
- /kotonebot/kaa/sprites/{7e614cff-b492-4c4d-bbfe-0853ff65fcec.png → 1abdc520-6123-40c9-bf50-d84e46f9420c.png} +0 -0
- /kotonebot/kaa/sprites/{661d0e8d-379d-401d-9f29-147e70123adf.png → 1ae6b793-d85f-4b06-ba9f-bdb7fbed26fc.png} +0 -0
- /kotonebot/kaa/sprites/{7c7cbe5a-37f0-4cf3-8376-4ceeb7a662b0.png → 1d5835f8-593c-4ec4-a360-81fce8d2f959.png} +0 -0
- /kotonebot/kaa/sprites/{d6235144-ce78-4884-88b4-d1a12b76155f.png → 1e540586-c381-4aed-b689-e9cd2708ae85.png} +0 -0
- /kotonebot/kaa/sprites/{eea2af85-94b2-4c41-8f51-393059dcc43c.png → 1f8cca6a-ae0a-44c9-a267-989ae508320a.png} +0 -0
- /kotonebot/kaa/sprites/{ebb662bb-62b4-404c-bb8f-4a7d5feccaa8.png → 214fad37-3e64-4786-8cfa-b48dd49ddbe4.png} +0 -0
- /kotonebot/kaa/sprites/{d32f8851-4fd2-4484-8ae8-66a375a43f3d.png → 21f2fdd8-c6fe-44fe-bcc6-efa8bc7f895a.png} +0 -0
- /kotonebot/kaa/sprites/{ff361c63-3f3d-48df-a26f-7698bd459219.png → 255b0e7a-c47a-4f70-9c92-5e3fa06d4d4c.png} +0 -0
- /kotonebot/kaa/sprites/{3cd5382a-a679-4f06-ab83-6328a943148d.png → 2ac9bca3-aad6-4d19-a4b7-4d7197d95fba.png} +0 -0
- /kotonebot/kaa/sprites/{a148b768-8c8d-4fee-b29f-11d73240a3d0.png → 2c43b51a-7ca5-4401-a05f-d3b3de17c2d3.png} +0 -0
- /kotonebot/kaa/sprites/{66c7e6df-5c90-4b3a-9b51-78cff1357ed7.png → 2e279b36-1057-453f-9a7e-7ac61ddce6f9.png} +0 -0
- /kotonebot/kaa/sprites/{2585cb7b-af94-46ac-a31d-f50bd09f40a6.png → 2e5cfcf0-34fc-4b17-9283-0c269d04ae98.png} +0 -0
- /kotonebot/kaa/sprites/{28e5138d-bcd4-40d2-9e2f-0c845004b8ae.png → 32d066ef-5783-4ab4-8a41-5e948169b1d7.png} +0 -0
- /kotonebot/kaa/sprites/{1c14e581-b664-488c-9d29-f5228ee6d328.png → 3303b048-552d-4794-aa57-180b43187d5a.png} +0 -0
- /kotonebot/kaa/sprites/{566e641a-a364-415c-a17b-2db7862f2714.png → 3336498e-763b-4b43-9939-a271d2deb64f.png} +0 -0
- /kotonebot/kaa/sprites/{dd5ffd48-2ab0-4795-8193-8a8310101574.png → 350736d7-0774-4a48-973c-d9373fc68ea3.png} +0 -0
- /kotonebot/kaa/sprites/{8938249c-94d3-4f20-8013-85d481a54d87.png → 368d245a-8777-437a-80c4-e6b0504236e6.png} +0 -0
- /kotonebot/kaa/sprites/{9b439501-e57d-4912-9f57-67c4534060f7.png → 394c60cc-1caa-4a29-a387-798316d48d4a.png} +0 -0
- /kotonebot/kaa/sprites/{3d7d1e3f-29c7-431d-8621-3f31b8880492.png → 3bf9aa00-7c6d-46ec-b487-7f846588acbe.png} +0 -0
- /kotonebot/kaa/sprites/{34dcd41c-b800-43b4-b24f-c569bae59db2.png → 4183bf72-4ca7-4480-a6db-c81632b1a62b.png} +0 -0
- /kotonebot/kaa/sprites/{7b552e56-0065-45d8-a0dc-bfe3be62b91f.png → 42092d5b-d11d-4651-9cd5-49302f52d50b.png} +0 -0
- /kotonebot/kaa/sprites/{96b12d02-c634-4e9c-a465-7ee61d5fc0bd.png → 4365cb24-54a1-4998-8a2e-bed02fc988f5.png} +0 -0
- /kotonebot/kaa/sprites/{7e4a2554-c05b-458f-b31f-ac6930e8078e.png → 471d7204-23f3-4d72-a852-77e8b424ddff.png} +0 -0
- /kotonebot/kaa/sprites/{6d225f8d-efc0-42a5-93af-7b81e24377c5.png → 48fc4fee-0d6e-4995-8d29-37791d33759e.png} +0 -0
- /kotonebot/kaa/sprites/{8cbbfa8e-17aa-42e7-92f7-319a02c8f7fa.png → 49fa1fd6-8115-476d-aa60-2d63613ef931.png} +0 -0
- /kotonebot/kaa/sprites/{d94ce829-a7ab-44aa-bc0c-a4801b650088.png → 4c07fc6b-662a-4216-b1e6-6036fa6f717d.png} +0 -0
- /kotonebot/kaa/sprites/{ee8a6029-63b3-4c13-bdc5-9bd8546d3316.png → 4c2fe337-73f6-4ed4-84ae-f17bf4787645.png} +0 -0
- /kotonebot/kaa/sprites/{3e558d01-1d7d-4ed3-9200-738252539dc1.png → 54a7603e-fd84-4d7f-99ef-f95d3695aa42.png} +0 -0
- /kotonebot/kaa/sprites/{5ba7d61f-282d-4ad0-881a-842c26e7f66c.png → 54e4f9a3-3ae6-4bf4-85b1-680889835137.png} +0 -0
- /kotonebot/kaa/sprites/{5a0d6f90-3758-4baa-94fc-a4a412284628.png → 550c0ad2-4c38-4c34-8be2-9ea278b3f822.png} +0 -0
- /kotonebot/kaa/sprites/{0f986eac-1e3c-48ed-9850-cae529b30503.png → 5b3f7210-d28b-4117-a664-efb790eec911.png} +0 -0
- /kotonebot/kaa/sprites/{d77a936b-c0ae-4dbd-8b44-82288a0957d6.png → 6224165f-3fa9-483f-b4fb-73c44e8009e4.png} +0 -0
- /kotonebot/kaa/sprites/{ff5a0417-229f-41bd-8121-708b08417114.png → 63b1d3d9-a0d7-413e-8e67-215ee46e5af7.png} +0 -0
- /kotonebot/kaa/sprites/{7fcc8f4c-9d06-4747-8c1e-aaba3a61cc0e.png → 64d7e162-a761-458b-a0c6-083658141032.png} +0 -0
- /kotonebot/kaa/sprites/{60cfef80-cd08-4205-8088-8d0b22a59b5a.png → 6b33fe3c-28ff-49ad-ba24-7279c8e9ec19.png} +0 -0
- /kotonebot/kaa/sprites/{81fec353-ad18-4223-9ea3-8d128a4a3e77.png → 6b4f820d-8b40-4ac1-9322-550860cbda08.png} +0 -0
- /kotonebot/kaa/sprites/{2d902d81-5500-4265-9867-c5c4cac573d7.png → 6ede6499-0efe-4ad2-83c7-5fd8a512c52e.png} +0 -0
- /kotonebot/kaa/sprites/{47f4b0a5-5792-4e82-b597-d58ea0b1f494.png → 71293cd1-83de-4f15-9608-1d31678e3566.png} +0 -0
- /kotonebot/kaa/sprites/{c2e3d6ac-00b6-4d2a-a30b-52a1190f5f05.png → 71ce4a03-5865-47fb-a2a2-d220dbd8ead3.png} +0 -0
- /kotonebot/kaa/sprites/{61f56d51-8d30-4aed-857a-8eff6fab27c1.png → 720cfc0e-74a2-4239-bc08-ea9927871cd0.png} +0 -0
- /kotonebot/kaa/sprites/{a2d9b907-f68e-47c7-8aa6-31c07c272d94.png → 73eec0a3-e3ba-40c8-b163-321a5b7feb81.png} +0 -0
- /kotonebot/kaa/sprites/{3bd19f01-57f8-4f8b-98b7-b5dd0779f77d.png → 74c8b69c-bceb-438f-a4a4-49e3abd7fa46.png} +0 -0
- /kotonebot/kaa/sprites/{432df4be-4970-4ac0-8465-a698bce6fe65.png → 757d08d7-c7a1-430a-8938-edd824ed7117.png} +0 -0
- /kotonebot/kaa/sprites/{aab26578-b548-41e5-8996-40ef821ca041.png → 7e00779b-de42-4406-88f9-07d93e47f104.png} +0 -0
- /kotonebot/kaa/sprites/{7dcc9134-9e5f-433b-ae5c-7530484f3f5f.png → 82eab6fc-1968-42a4-bb43-d9cee984b33d.png} +0 -0
- /kotonebot/kaa/sprites/{bd04472b-eeeb-4ad7-b385-8347b7053887.png → 850d5405-2103-4a2f-9e00-d5c5f43ce9a7.png} +0 -0
- /kotonebot/kaa/sprites/{4de619fd-ed06-4210-b1f0-11556deb4dd9.png → 864b57b0-c2f9-49eb-864c-314f72c0f56c.png} +0 -0
- /kotonebot/kaa/sprites/{252f1cd3-8e09-4b34-b5ba-47b1137a19c1.png → 88476c65-0056-4ae4-9c9e-3ff1bae964e8.png} +0 -0
- /kotonebot/kaa/sprites/{adc38fcc-84d2-4f7c-846d-4fe96dd5d08a.png → 896ed7b5-72c8-4c1d-90ff-eb7f12876f9c.png} +0 -0
- /kotonebot/kaa/sprites/{7dfdefa7-d95f-4348-9e0b-640ed17e138f.png → 8e021860-0c8f-4da5-84f8-1ed65ad6f720.png} +0 -0
- /kotonebot/kaa/sprites/{b5a58c56-3f09-47e5-ab61-57bab752e735.png → 8e90dc5b-d79a-4133-b722-edbb14f5f0db.png} +0 -0
- /kotonebot/kaa/sprites/{dc64e856-2f31-48b1-b17d-32b499f819ce.png → 917be8d3-602c-495c-b2ed-41b1c84e7398.png} +0 -0
- /kotonebot/kaa/sprites/{f7a4208f-0373-4f26-907f-84c3f2b810fc.png → 918db28b-0d43-4056-a506-3279f2b724c8.png} +0 -0
- /kotonebot/kaa/sprites/{3ace2c73-cf00-4706-9aac-1a0229b1b3f5.png → 93f74a70-acd1-4453-8254-07a797839b5f.png} +0 -0
- /kotonebot/kaa/sprites/{464c3d3a-c772-4f85-94d5-970f46c8d213.png → 99967c02-b5cf-43ba-9ca6-23e2781b25d9.png} +0 -0
- /kotonebot/kaa/sprites/{04c9d1c8-09b9-402d-b688-796253fdaf0c.png → 9aee770e-1746-4076-b3c4-5da218321614.png} +0 -0
- /kotonebot/kaa/sprites/{6468ab50-2d25-4b18-b555-2a56397968b0.png → 9bc1e849-e69d-4849-a849-45ea81829567.png} +0 -0
- /kotonebot/kaa/sprites/{e62afa2c-1c5b-426e-8ff1-ea51f75d0f20.png → 9dfde42d-fd40-435b-8a41-50be0fb8781e.png} +0 -0
- /kotonebot/kaa/sprites/{1d457687-ff10-41b0-95e1-6c1b3868b2a0.png → 9ec515d0-c177-43fa-bbf3-ea2a57080969.png} +0 -0
- /kotonebot/kaa/sprites/{e7a0ea00-2a72-4d74-8664-53726e3e1078.png → a0fc1501-162d-49c6-824c-03e028d8fed7.png} +0 -0
- /kotonebot/kaa/sprites/{b92c4308-3778-47aa-8a0b-222d32721beb.png → a2e9d3a5-6f6f-4530-8a35-a09edfd35b8e.png} +0 -0
- /kotonebot/kaa/sprites/{c8f444cc-e809-44c2-86a3-3cbb5bcd0356.png → a5e11b99-d89e-47a2-ae67-4e0a04bfc022.png} +0 -0
- /kotonebot/kaa/sprites/{7a8c4af3-2ac1-4295-b844-350ad00f2c50.png → a6a23fad-cc30-43cd-b869-d2fad70d32ab.png} +0 -0
- /kotonebot/kaa/sprites/{d5a9d7f7-a065-4ff3-ae4c-b027f348ef54.png → a7cc8346-8b35-4f6a-acef-8cd4d29b5591.png} +0 -0
- /kotonebot/kaa/sprites/{2c2ff5ed-3b1a-4dcc-89a9-9457908cb184.png → a7f49544-2aaf-4f5c-a217-7203bfa87758.png} +0 -0
- /kotonebot/kaa/sprites/{52ae79ea-f4a4-4c19-9fe8-327f285ace1e.png → a885914f-a305-4af3-b2a5-991fdf0101f6.png} +0 -0
- /kotonebot/kaa/sprites/{8ed3eab8-779b-4b66-bc24-06b0b1dfac18.png → a914c9d7-3a19-4d9c-940e-579bf3f7fa79.png} +0 -0
- /kotonebot/kaa/sprites/{ad9cc197-c83d-4d39-b187-7105cde60ef5.png → a9e30963-0772-401a-85f8-33369ca22267.png} +0 -0
- /kotonebot/kaa/sprites/{a6bd2250-81b5-4f54-b6d9-bf9a5a4876d1.png → aa55089d-7b80-4763-a226-cde10e56f8a5.png} +0 -0
- /kotonebot/kaa/sprites/{88e4e3c6-3f6b-4192-83c7-4b20a51ad53a.png → aed0fd9a-0e59-4ead-b6a2-497b94f0eb16.png} +0 -0
- /kotonebot/kaa/sprites/{c84eada8-ff68-4d73-802b-6de88e73ec6d.png → af5714a6-e4a0-47ef-9151-2a8c9614e931.png} +0 -0
- /kotonebot/kaa/sprites/{a1791427-52af-4d1e-8e95-e0533cb66d3c.png → b176f60c-94ba-46e3-b562-7fc86b25c17f.png} +0 -0
- /kotonebot/kaa/sprites/{e25468f5-929a-4a49-a2e0-4527075353b5.png → b22260e3-22c6-4c80-b986-f4fd8db22ddc.png} +0 -0
- /kotonebot/kaa/sprites/{03821ecf-fdd2-4e89-8249-fc7288ac79be.png → b3debf96-a90b-4de7-b19e-83c2d82075ee.png} +0 -0
- /kotonebot/kaa/sprites/{a7e31af5-a896-47bb-af4b-e71936ac6334.png → b3e5704b-63c9-4226-9e49-69c680627b61.png} +0 -0
- /kotonebot/kaa/sprites/{f93c7a24-157d-43ef-adcc-3873d313c6d7.png → b66ed448-356e-44f9-ad45-40473d47ee24.png} +0 -0
- /kotonebot/kaa/sprites/{f08044bf-8a33-4d6b-8791-94470678efa6.png → b7283194-0e6d-4ac1-84e0-c2062af8eba8.png} +0 -0
- /kotonebot/kaa/sprites/{bba3cd68-3023-4a7b-9fe9-36ec7adbfc89.png → bd5190da-d3ed-462e-a573-b8f015cdef97.png} +0 -0
- /kotonebot/kaa/sprites/{eb67d908-13f8-4cef-9a86-9770e342ab77.png → be0bca2e-dfd5-48b6-a2ac-e2699991d37b.png} +0 -0
- /kotonebot/kaa/sprites/{2a539cb4-827f-449b-9780-14a94678948b.png → be2d7e60-56d2-4891-aae9-b5d2a65a8d03.png} +0 -0
- /kotonebot/kaa/sprites/{6a033af8-222c-459a-9ab9-a9a69b27822d.png → c654428b-4f16-4257-800f-da627ddb7595.png} +0 -0
- /kotonebot/kaa/sprites/{749bd918-8dfb-4393-bf91-b39e285f1d75.png → ca850faa-154e-4170-9446-91dd325e14af.png} +0 -0
- /kotonebot/kaa/sprites/{f03739ee-31e1-40ca-9aaf-6c0447d426a4.png → cce54a7c-bdd5-4063-8a40-e01709e69893.png} +0 -0
- /kotonebot/kaa/sprites/{05903cc9-9f7a-43ac-88e4-988a68311e05.png → cd5ba3a7-96aa-4efc-97fc-b72f72d084d2.png} +0 -0
- /kotonebot/kaa/sprites/{a3d5b052-526f-45ef-a2ed-5bba8ca9e4b1.png → d3c31276-8395-4aa3-ae1a-4c50a24e8574.png} +0 -0
- /kotonebot/kaa/sprites/{d0ad5222-0ee0-412e-819f-3217f9fd854b.png → d40a6e09-4740-41a8-af0f-9da09de38bf1.png} +0 -0
- /kotonebot/kaa/sprites/{360bcb7f-c710-49d5-9942-2812ed03a447.png → d559328f-9b26-4ea1-8f96-f432abf0214d.png} +0 -0
- /kotonebot/kaa/sprites/{f88f9f3b-e0e7-498c-ad1c-e92a719164f3.png → d597a32e-5ccb-4550-ab18-1905123c22d4.png} +0 -0
- /kotonebot/kaa/sprites/{efb31647-3760-4b76-8b5d-ec4b5fb7a975.png → d5a25a5f-8bd0-4f09-aec7-fda24eaf795e.png} +0 -0
- /kotonebot/kaa/sprites/{c370b930-9750-4782-9564-5ce4cd609bdd.png → d9432d63-1aef-43a7-8642-d10f3c15b092.png} +0 -0
- /kotonebot/kaa/sprites/{31745cd7-226e-4e11-b96d-2e202a7097e7.png → da351a32-c51f-4746-8f89-778343772d08.png} +0 -0
- /kotonebot/kaa/sprites/{eec4d7d6-3084-4bab-99c1-10e3a9459393.png → da7ef120-103c-4d5f-b95c-2bcd29757d3c.png} +0 -0
- /kotonebot/kaa/sprites/{e54b7482-a348-4252-a373-2ee69b3805b5.png → e4c40e7a-f67c-45d6-9775-8389bcff0b67.png} +0 -0
- /kotonebot/kaa/sprites/{75cad2af-b8c5-4f5f-8398-acd90eb4348e.png → e850b360-da95-4498-ab3e-177e0d57e189.png} +0 -0
- /kotonebot/kaa/sprites/{6597b7fd-3c5b-442f-a327-d18b555de544.png → e8935f50-3109-4d98-9783-86738763a431.png} +0 -0
- /kotonebot/kaa/sprites/{e049018e-9d2b-4537-add1-e902cf8ac69a.png → ed2f8cd2-be82-4d48-acd0-c48cf8bdd800.png} +0 -0
- /kotonebot/kaa/sprites/{39882ba6-c9d9-4742-b92d-206781c5f60e.png → ed56bfc1-d3c5-4bc3-a910-f861cfb2f379.png} +0 -0
- /kotonebot/kaa/sprites/{9a0c8f11-33f0-4c53-a911-556f3481d952.png → ed822aca-dde6-4235-8776-0c47884c4a9a.png} +0 -0
- /kotonebot/kaa/sprites/{3ea31c2c-1421-421c-a7fa-7994c06e4bca.png → ef46ae80-8c34-4948-9076-b0536805e7dc.png} +0 -0
- /kotonebot/kaa/sprites/{967b207a-79bb-479a-b50e-b2a04cf7ed54.png → f11ca963-fc05-4486-acf7-aa8f7415e6b5.png} +0 -0
- /kotonebot/kaa/sprites/{fbbf4921-ece5-4dc0-875d-8f7182596d4f.png → f404eabd-6b87-48a4-8ad7-1e7d521daa94.png} +0 -0
- /kotonebot/kaa/sprites/{1f5f5454-eb1c-45c3-8467-80c224d528e6.png → f61e28cd-9eaa-4d3c-b25d-8bfdaecb1255.png} +0 -0
- /kotonebot/kaa/sprites/{15ee94ce-1930-4eff-9ce2-0ebe947aaa05.png → f9bba6f1-6237-43bf-85b1-f6250a64a5d6.png} +0 -0
- /kotonebot/kaa/sprites/{76acc2b6-6649-4b1a-bd52-18ab9a2341d0.png → fb2694c2-8f0e-4ec3-9d76-087f085f2e55.png} +0 -0
- /kotonebot/kaa/sprites/{6c151fbe-7cf9-4629-b47a-da7be835bb4b.png → fbe45406-81bd-4298-ab4f-ed7346c25eb8.png} +0 -0
- {ksaa-2025.7.27.1.dist-info → ksaa-2025.8.17.0.dist-info}/WHEEL +0 -0
- {ksaa-2025.7.27.1.dist-info → ksaa-2025.8.17.0.dist-info}/entry_points.txt +0 -0
- {ksaa-2025.7.27.1.dist-info → ksaa-2025.8.17.0.dist-info}/licenses/LICENSE +0 -0
- {ksaa-2025.7.27.1.dist-info → ksaa-2025.8.17.0.dist-info}/top_level.txt +0 -0
kotonebot/__init__.py
CHANGED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import typing
|
|
3
|
+
|
|
4
|
+
import pythoncom
|
|
5
|
+
from win32comext.shell import shell, shellcon
|
|
6
|
+
|
|
7
|
+
def create_shortcut(target_file: str, target_args: str, link_file: str | None, *,
|
|
8
|
+
link_name: str | None = None,
|
|
9
|
+
icon_path: str, description: str = ""):
|
|
10
|
+
"""
|
|
11
|
+
Creates a shortcut.
|
|
12
|
+
|
|
13
|
+
:param target_file: The path to the target file.
|
|
14
|
+
:param target_args: The arguments for the target file.
|
|
15
|
+
:param link_file: The path to the shortcut file. If None, creates on the desktop.
|
|
16
|
+
:param link_name: The name of the shortcut file. If None, it is derived from the target file name.
|
|
17
|
+
Only used when link_file is None.
|
|
18
|
+
:param icon_path: The path to the icon file.
|
|
19
|
+
:param description: The description of the shortcut.
|
|
20
|
+
"""
|
|
21
|
+
pythoncom.CoInitialize()
|
|
22
|
+
if link_file is None:
|
|
23
|
+
desktop_path = shell.SHGetFolderPath(0, shellcon.CSIDL_DESKTOP, 0, 0)
|
|
24
|
+
if link_name is None:
|
|
25
|
+
link_name = os.path.splitext(os.path.basename(target_file))[0]
|
|
26
|
+
link_file = os.path.join(desktop_path, f"{link_name}.lnk")
|
|
27
|
+
|
|
28
|
+
shortcut = pythoncom.CoCreateInstance(
|
|
29
|
+
shell.CLSID_ShellLink,
|
|
30
|
+
None,
|
|
31
|
+
pythoncom.CLSCTX_INPROC_SERVER,
|
|
32
|
+
shell.IID_IShellLink
|
|
33
|
+
)
|
|
34
|
+
# TODO: 下面这些方法都没有 typing,会报错,需要一种方法加入 typing
|
|
35
|
+
shortcut.SetPath(target_file) # type: ignore
|
|
36
|
+
shortcut.SetArguments(target_args) # type: ignore
|
|
37
|
+
shortcut.SetDescription(description) # type: ignore
|
|
38
|
+
shortcut.SetIconLocation(icon_path, 0) # type: ignore
|
|
39
|
+
|
|
40
|
+
persist_file = shortcut.QueryInterface(pythoncom.IID_IPersistFile)
|
|
41
|
+
persist_file.Save(link_file, 0) # type: ignore
|
|
42
|
+
pythoncom.CoUninitialize()
|
|
43
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
from kotonebot.interop.win.shortcut import create_shortcut
|
|
5
|
+
from kotonebot.kaa.errors import LauncherNotFoundError
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def create_desktop_shortcut(start_immediately: bool):
|
|
9
|
+
exe_path = os.path.abspath('./kaa.exe')
|
|
10
|
+
if not os.path.exists(exe_path):
|
|
11
|
+
raise LauncherNotFoundError()
|
|
12
|
+
|
|
13
|
+
icon_paths = ['./kaa.exe', './kaa.ico']
|
|
14
|
+
icon_path = next((os.path.abspath(p) for p in icon_paths if os.path.exists(p)), '')
|
|
15
|
+
|
|
16
|
+
if start_immediately:
|
|
17
|
+
create_shortcut(
|
|
18
|
+
target_file=exe_path,
|
|
19
|
+
target_args='--start-immidiately',
|
|
20
|
+
link_file=None, # Creates on desktop
|
|
21
|
+
link_name='琴音小助手(快捷启动)',
|
|
22
|
+
icon_path=icon_path,
|
|
23
|
+
description='启动琴音小助手并立即运行任务'
|
|
24
|
+
)
|
|
25
|
+
else:
|
|
26
|
+
create_shortcut(
|
|
27
|
+
target_file=exe_path,
|
|
28
|
+
target_args='',
|
|
29
|
+
link_file=None, # Creates on desktop
|
|
30
|
+
link_name='琴音小助手',
|
|
31
|
+
icon_path=icon_path,
|
|
32
|
+
description='启动琴音小助手'
|
|
33
|
+
)
|
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
|
-
return gr.Dropdown(choices=choices, value=new_value)
|
|
884
|
+
return 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')
|
|
923
924
|
|
|
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
|
+
)
|
|
931
|
+
|
|
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,
|
|
@@ -1384,12 +1405,6 @@ class KotoneBotUI:
|
|
|
1384
1405
|
info="进行一次 REGULAR 培育需要 ~30min,进行一次 PRO 培育需要 ~1h(具体视设备性能而定)。",
|
|
1385
1406
|
visible=False
|
|
1386
1407
|
)
|
|
1387
|
-
produce_count = gr.Number(
|
|
1388
|
-
minimum=1,
|
|
1389
|
-
label="培育次数",
|
|
1390
|
-
info="培育的次数。",
|
|
1391
|
-
visible=False
|
|
1392
|
-
)
|
|
1393
1408
|
|
|
1394
1409
|
# 添加偶像选择
|
|
1395
1410
|
idol_choices = []
|
|
@@ -1505,13 +1520,6 @@ class KotoneBotUI:
|
|
|
1505
1520
|
label="培育模式",
|
|
1506
1521
|
info="进行一次 REGULAR 培育需要 ~30min,进行一次 PRO 培育需要 ~1h(具体视设备性能而定)。"
|
|
1507
1522
|
)
|
|
1508
|
-
produce_count = gr.Number(
|
|
1509
|
-
minimum=1,
|
|
1510
|
-
value=self.current_config.options.produce.produce_count,
|
|
1511
|
-
label="培育次数",
|
|
1512
|
-
interactive=True,
|
|
1513
|
-
info="培育的次数。"
|
|
1514
|
-
)
|
|
1515
1523
|
|
|
1516
1524
|
# 添加偶像选择
|
|
1517
1525
|
idol_choices = []
|
|
@@ -1642,7 +1650,6 @@ class KotoneBotUI:
|
|
|
1642
1650
|
gr.Textbox(value="", visible=False), # solution_name
|
|
1643
1651
|
gr.Textbox(value="", visible=False), # solution_description
|
|
1644
1652
|
gr.Dropdown(visible=False), # produce_mode
|
|
1645
|
-
gr.Number(visible=False), # produce_count
|
|
1646
1653
|
gr.Dropdown(visible=False), # produce_idols
|
|
1647
1654
|
gr.Markdown(visible=False), # kotone_warning
|
|
1648
1655
|
gr.Checkbox(visible=False), # auto_set_memory
|
|
@@ -1672,7 +1679,6 @@ class KotoneBotUI:
|
|
|
1672
1679
|
gr.Textbox(value=solution.name, visible=True),
|
|
1673
1680
|
gr.Textbox(value=solution.description or "", visible=True),
|
|
1674
1681
|
gr.Dropdown(value=solution.data.mode, visible=True),
|
|
1675
|
-
gr.Number(value=self.current_config.options.produce.produce_count, visible=True),
|
|
1676
1682
|
gr.Dropdown(value=solution.data.idol, visible=True),
|
|
1677
1683
|
gr.Markdown(visible=has_kotone and not is_strict_mode),
|
|
1678
1684
|
gr.Checkbox(value=solution.data.auto_set_memory, visible=True),
|
|
@@ -1768,7 +1774,7 @@ class KotoneBotUI:
|
|
|
1768
1774
|
else:
|
|
1769
1775
|
return gr.Dropdown()
|
|
1770
1776
|
|
|
1771
|
-
def on_save_solution(solution_id, name, description, mode,
|
|
1777
|
+
def on_save_solution(solution_id, name, description, mode, idols, auto_memory, memory_sets,
|
|
1772
1778
|
auto_support, support_card_sets, pt_boost, note_boost, follow_producer, study_lesson, prefer_ap,
|
|
1773
1779
|
actions, detection_mode, ap_drink, skip_commu_val):
|
|
1774
1780
|
"""保存培育方案"""
|
|
@@ -1810,9 +1816,6 @@ class KotoneBotUI:
|
|
|
1810
1816
|
# 保存方案
|
|
1811
1817
|
solution_manager.save(solution_id, solution)
|
|
1812
1818
|
|
|
1813
|
-
# 同时更新配置中的 produce_count
|
|
1814
|
-
self.current_config.options.produce.produce_count = int(count)
|
|
1815
|
-
|
|
1816
1819
|
# 重新列出所有方案(确保没有重复项)
|
|
1817
1820
|
solutions = solution_manager.list()
|
|
1818
1821
|
solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
|
|
@@ -1863,7 +1866,7 @@ class KotoneBotUI:
|
|
|
1863
1866
|
inputs=[solution_dropdown],
|
|
1864
1867
|
outputs=[
|
|
1865
1868
|
solution_name, solution_description,
|
|
1866
|
-
produce_mode,
|
|
1869
|
+
produce_mode, produce_idols, kotone_warning,
|
|
1867
1870
|
auto_set_memory, memory_sets_group, memory_sets,
|
|
1868
1871
|
auto_set_support, support_card_sets_group, support_card_sets,
|
|
1869
1872
|
use_pt_boost, use_note_boost, follow_producer,
|
|
@@ -1899,7 +1902,7 @@ class KotoneBotUI:
|
|
|
1899
1902
|
fn=on_save_solution,
|
|
1900
1903
|
inputs=[
|
|
1901
1904
|
solution_dropdown, solution_name, solution_description,
|
|
1902
|
-
produce_mode,
|
|
1905
|
+
produce_mode, produce_idols,
|
|
1903
1906
|
auto_set_memory, memory_sets, auto_set_support, support_card_sets,
|
|
1904
1907
|
use_pt_boost, use_note_boost, follow_producer,
|
|
1905
1908
|
self_study_lesson, prefer_lesson_ap, actions_order,
|
|
@@ -2224,6 +2227,15 @@ class KotoneBotUI:
|
|
|
2224
2227
|
info=MiscConfig.model_fields['expose_to_lan'].description,
|
|
2225
2228
|
interactive=True
|
|
2226
2229
|
)
|
|
2230
|
+
with gr.Row():
|
|
2231
|
+
gr.Button("创建桌面快捷方式").click(
|
|
2232
|
+
fn=self._create_shortcut_button_click(False),
|
|
2233
|
+
outputs=[]
|
|
2234
|
+
)
|
|
2235
|
+
gr.Button("创建一键启动快捷方式").click(
|
|
2236
|
+
fn=self._create_shortcut_button_click(True),
|
|
2237
|
+
outputs=[]
|
|
2238
|
+
)
|
|
2227
2239
|
|
|
2228
2240
|
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
2229
2241
|
config.misc.check_update = data['check_update']
|
|
@@ -2236,6 +2248,12 @@ class KotoneBotUI:
|
|
|
2236
2248
|
'expose_to_lan': expose_to_lan
|
|
2237
2249
|
}
|
|
2238
2250
|
|
|
2251
|
+
def _create_shortcut_button_click(self, start_immediately: bool) -> Callable[[], None]:
|
|
2252
|
+
def _inner():
|
|
2253
|
+
create_desktop_shortcut(start_immediately)
|
|
2254
|
+
gr.Success("快捷方式创建成功")
|
|
2255
|
+
return _inner
|
|
2256
|
+
|
|
2239
2257
|
def _create_debug_settings(self) -> ConfigBuilderReturnValue:
|
|
2240
2258
|
"""调试设置:仅在调试时使用"""
|
|
2241
2259
|
with gr.Column():
|
|
@@ -2269,7 +2287,7 @@ class KotoneBotUI:
|
|
|
2269
2287
|
|
|
2270
2288
|
def _create_settings_tab(self) -> None:
|
|
2271
2289
|
with gr.Tab("设置"):
|
|
2272
|
-
gr.Markdown("## 设置")
|
|
2290
|
+
gr.Markdown("## 设置 <span style='color: red; font-size: 0.8rem; font-weight: normal;'>设置修改后需要保存(网页底部)才会生效!</span>")
|
|
2273
2291
|
|
|
2274
2292
|
# 模拟器设置
|
|
2275
2293
|
emulator_settings = self._create_emulator_settings()
|
|
@@ -2661,11 +2679,14 @@ class KotoneBotUI:
|
|
|
2661
2679
|
|
|
2662
2680
|
return app
|
|
2663
2681
|
|
|
2664
|
-
def main(kaa: Kaa | None = None) -> None:
|
|
2682
|
+
def main(kaa: Kaa | None = None, start_immidiately: bool = False) -> None:
|
|
2665
2683
|
kaa = kaa or Kaa('./config.json')
|
|
2666
2684
|
ui = KotoneBotUI(kaa)
|
|
2667
2685
|
app = ui.create_ui()
|
|
2668
2686
|
|
|
2687
|
+
if start_immidiately:
|
|
2688
|
+
ui.start_run()
|
|
2689
|
+
|
|
2669
2690
|
server_name = "0.0.0.0" if ui.current_config.options.misc.expose_to_lan else "127.0.0.1"
|
|
2670
2691
|
app.launch(inbrowser=True, show_error=True, server_name=server_name)
|
|
2671
2692
|
|
kotonebot/kaa/metadata.py
CHANGED
|
@@ -1,6 +1,32 @@
|
|
|
1
1
|
WHATS_NEW = """
|
|
2
2
|
# 更新日志
|
|
3
3
|
## kaa
|
|
4
|
+
### v2025.8.17.0
|
|
5
|
+
脚本:
|
|
6
|
+
* [修复] 尝试修复进入每日商店时报错的问题(#e9529b7)
|
|
7
|
+
* [修复] 修复刷新商店商品时脚本不会等待刷新完成的问题(#180d800)
|
|
8
|
+
* [修复] 修复商店刷新后第二次购买会跳过第一行的问题 #59(#a327791)
|
|
9
|
+
* [修复] 修复金币商店购买一个物品总是点击两次的问题(#94a264e)
|
|
10
|
+
|
|
11
|
+
界面:
|
|
12
|
+
* [修复] 移除模拟器设置的最后多余的 Dropdown(#91d05b1)
|
|
13
|
+
* [修复] 移除培育方案中多余的培育次数输入框(#c0549d9)
|
|
14
|
+
* [新增] 新增保存设置提示(#b56eabc)
|
|
15
|
+
|
|
16
|
+
### v2025.8.2.0
|
|
17
|
+
脚本:
|
|
18
|
+
* [修复] 修复 DMM 版启动游戏提示找不到窗口的问题(#46e72c4)
|
|
19
|
+
* [重构] 将部分 while 循环用 Loop 类重写(#8c99955)
|
|
20
|
+
|
|
21
|
+
界面:
|
|
22
|
+
* [新增] 模拟器列表懒加载(#0f18d36)
|
|
23
|
+
* [新增] 新增创建桌面快捷方式功能(#6640a21)
|
|
24
|
+
* [新增] 新增命令行参数 --start-immidiately(#c39dd79)
|
|
25
|
+
|
|
26
|
+
启动器:
|
|
27
|
+
* [新增] 以管理员重启时跳过重复检查更新(#142d9ef)
|
|
28
|
+
* [新增] 启动器支持拖拽安装 whl 包(#11c75dc)
|
|
29
|
+
|
|
4
30
|
### v2025.7.27.1
|
|
5
31
|
脚本:
|
|
6
32
|
* [修复] 修复检测培育阶段函数过早返回的问题(#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
|
|
Binary file
|
|
Binary file
|