ksaa 2025.8.17.0__py3-none-any.whl → 2025.9b1__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/kaa/application/core/idle_mode.py +172 -0
- kotonebot/kaa/config/__init__.py +2 -0
- kotonebot/kaa/config/schema.py +11 -0
- kotonebot/kaa/main/gr.py +182 -51
- kotonebot/kaa/metadata.py +45 -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-amao-3-013_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-amao-3-013_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-014_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-015_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-015_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-3-002_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-3-002_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-3-012_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-3-012_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-014_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-014_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-014_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-014_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-014_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-014_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-008_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-008_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-013_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-013_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-013_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-013_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-013_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-013_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-014_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-014_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-014_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-014_1.png +0 -0
- kotonebot/kaa/sprites/70898bf8-56c5-4f84-becb-629c9ab6a7da.png +0 -0
- kotonebot/kaa/sprites/9483fae5-3a72-4684-9403-d25d2c602d3d.png +0 -0
- kotonebot/kaa/sprites/9fd0753f-c607-4d49-82d1-40bda27e014f.png +0 -0
- kotonebot/kaa/sprites/a48324ae-7c1a-489e-b3c4-93d12267f88d.png +0 -0
- kotonebot/kaa/sprites/ce20a856-5629-4f8e-a8e1-d1bd14e18e4f.png +0 -0
- kotonebot/kaa/sprites/eaad330d-4e50-4b55-be2c-8da0f72764d9.png +0 -0
- kotonebot/kaa/tasks/R.py +135 -127
- kotonebot/kaa/tasks/actions/scenes.py +2 -0
- kotonebot/kaa/tasks/daily/purchase.py +2 -4
- kotonebot/kaa/tasks/produce/cards.py +3 -0
- kotonebot/kaa/tasks/produce/common.py +88 -0
- kotonebot/kaa/tasks/produce/in_purodyuusu.py +3 -3
- kotonebot/kaa/tasks/produce/non_lesson_actions.py +12 -6
- kotonebot/kaa/tasks/produce/produce.py +36 -55
- {ksaa-2025.8.17.0.dist-info → ksaa-2025.9b1.dist-info}/METADATA +92 -90
- {ksaa-2025.8.17.0.dist-info → ksaa-2025.9b1.dist-info}/RECORD +181 -150
- /kotonebot/kaa/sprites/{9bc1e849-e69d-4849-a849-45ea81829567.png → 002e7b92-11f4-487a-af55-334663e2b8cd.png} +0 -0
- /kotonebot/kaa/sprites/{3336498e-763b-4b43-9939-a271d2deb64f.png → 003c315c-418c-410e-ba45-290150097a25.png} +0 -0
- /kotonebot/kaa/sprites/{cd5ba3a7-96aa-4efc-97fc-b72f72d084d2.png → 01106370-2321-4696-a60e-dc76b565a097.png} +0 -0
- /kotonebot/kaa/sprites/{bd5190da-d3ed-462e-a573-b8f015cdef97.png → 0519d61c-0451-42a2-96ed-baa5ef026655.png} +0 -0
- /kotonebot/kaa/sprites/{0ef0615f-f293-4a4e-93ac-985b3a17c8d7.png → 0c2a1e9f-85be-4fec-a8ae-4e417c58d5a5.png} +0 -0
- /kotonebot/kaa/sprites/{0b947c81-0ab1-40a8-8c26-26258be572c7.png → 0d1ecf0b-b090-42b2-b895-cb1f5b415af8.png} +0 -0
- /kotonebot/kaa/sprites/{be2d7e60-56d2-4891-aae9-b5d2a65a8d03.png → 0d39671a-cfa3-4832-93e8-6ab61cece799.png} +0 -0
- /kotonebot/kaa/sprites/{c654428b-4f16-4257-800f-da627ddb7595.png → 0ffd0b92-78f6-4661-a2c3-3c337b75d3bb.png} +0 -0
- /kotonebot/kaa/sprites/{1e540586-c381-4aed-b689-e9cd2708ae85.png → 105df024-ece9-4c9c-9479-9f7423f4abec.png} +0 -0
- /kotonebot/kaa/sprites/{0da004d8-2cc5-43ab-9ac1-94d4f74dd37d.png → 112f47b8-e71f-426f-9081-0c8efb6ced72.png} +0 -0
- /kotonebot/kaa/sprites/{e850b360-da95-4498-ab3e-177e0d57e189.png → 11c5034e-d258-422d-850c-a4495b346778.png} +0 -0
- /kotonebot/kaa/sprites/{896ed7b5-72c8-4c1d-90ff-eb7f12876f9c.png → 12d59cc0-cef6-472d-b424-edaae52463ca.png} +0 -0
- /kotonebot/kaa/sprites/{6b4f820d-8b40-4ac1-9322-550860cbda08.png → 13338d14-2b0d-4630-a5d2-dc273f62524e.png} +0 -0
- /kotonebot/kaa/sprites/{4c2fe337-73f6-4ed4-84ae-f17bf4787645.png → 13a5d0e7-776e-40c2-8a52-dd3e016913b4.png} +0 -0
- /kotonebot/kaa/sprites/{d559328f-9b26-4ea1-8f96-f432abf0214d.png → 156cb3bd-0523-4a76-8747-8d4ce23fed7b.png} +0 -0
- /kotonebot/kaa/sprites/{da351a32-c51f-4746-8f89-778343772d08.png → 16d914f3-c3be-479e-932a-4c336c08b94e.png} +0 -0
- /kotonebot/kaa/sprites/{ed2f8cd2-be82-4d48-acd0-c48cf8bdd800.png → 1b39e16c-d8e2-4f4c-bc6d-a4511184f8af.png} +0 -0
- /kotonebot/kaa/sprites/{f11ca963-fc05-4486-acf7-aa8f7415e6b5.png → 1b82310e-8422-4be6-b31b-bc7693def4e4.png} +0 -0
- /kotonebot/kaa/sprites/{f61e28cd-9eaa-4d3c-b25d-8bfdaecb1255.png → 1d25aa70-8137-4c63-8dcf-a5b5a8f950e6.png} +0 -0
- /kotonebot/kaa/sprites/{a5e11b99-d89e-47a2-ae67-4e0a04bfc022.png → 1e324ce8-b56f-45d5-9476-713dabfdecf9.png} +0 -0
- /kotonebot/kaa/sprites/{a7f49544-2aaf-4f5c-a217-7203bfa87758.png → 22bda7ef-ad0d-4020-a667-6ae77b4805ca.png} +0 -0
- /kotonebot/kaa/sprites/{7e00779b-de42-4406-88f9-07d93e47f104.png → 23a39277-a6ac-4a49-9c6a-1fca1a3a4d9b.png} +0 -0
- /kotonebot/kaa/sprites/{1339693d-6e77-4058-921a-9079c8eb5a9a.png → 23b37aad-1de3-43e2-84e6-78f6f0f28fba.png} +0 -0
- /kotonebot/kaa/sprites/{d3c31276-8395-4aa3-ae1a-4c50a24e8574.png → 23f8844e-9272-4a5c-badf-a30676fd22da.png} +0 -0
- /kotonebot/kaa/sprites/{394c60cc-1caa-4a29-a387-798316d48d4a.png → 24458a04-ca4d-4330-9dd6-f074feac9a17.png} +0 -0
- /kotonebot/kaa/sprites/{a914c9d7-3a19-4d9c-940e-579bf3f7fa79.png → 246f9799-5367-4fb4-877d-821fb4acad71.png} +0 -0
- /kotonebot/kaa/sprites/{9ec515d0-c177-43fa-bbf3-ea2a57080969.png → 24d55c2b-dfe8-4a80-9f39-94045478f5a5.png} +0 -0
- /kotonebot/kaa/sprites/{21f2fdd8-c6fe-44fe-bcc6-efa8bc7f895a.png → 26262f2d-e12b-4992-8c14-15679cae4298.png} +0 -0
- /kotonebot/kaa/sprites/{0de1fa4d-3621-4671-9e1f-b8ed1e767adc.png → 2704de68-4349-4695-8102-4dcd93fe82c7.png} +0 -0
- /kotonebot/kaa/sprites/{3303b048-552d-4794-aa57-180b43187d5a.png → 279ab0e2-1601-4bfb-8d27-4019fc4dcd3d.png} +0 -0
- /kotonebot/kaa/sprites/{b7283194-0e6d-4ac1-84e0-c2062af8eba8.png → 2ad65f0c-3b9c-46ad-808e-11c6d6db7417.png} +0 -0
- /kotonebot/kaa/sprites/{1777dfb5-2793-4037-9da7-f789cf65896e.png → 2b3a82fd-79b3-400c-988a-248a7b277542.png} +0 -0
- /kotonebot/kaa/sprites/{cce54a7c-bdd5-4063-8a40-e01709e69893.png → 37d24544-1791-474d-8f74-b1dbe0dd3c6b.png} +0 -0
- /kotonebot/kaa/sprites/{6224165f-3fa9-483f-b4fb-73c44e8009e4.png → 3868b12d-8d93-4754-91bd-797680d24e22.png} +0 -0
- /kotonebot/kaa/sprites/{9aee770e-1746-4076-b3c4-5da218321614.png → 3de9bd37-90ef-45ec-88c0-03c4fd50fb51.png} +0 -0
- /kotonebot/kaa/sprites/{850d5405-2103-4a2f-9e00-d5c5f43ce9a7.png → 46198a1d-888e-4a12-827e-51cdd4fc30a2.png} +0 -0
- /kotonebot/kaa/sprites/{42092d5b-d11d-4651-9cd5-49302f52d50b.png → 49587e50-e978-461f-b49c-7f92347923f5.png} +0 -0
- /kotonebot/kaa/sprites/{8e90dc5b-d79a-4133-b722-edbb14f5f0db.png → 4af83157-f237-4072-a732-1e59814485e7.png} +0 -0
- /kotonebot/kaa/sprites/{255b0e7a-c47a-4f70-9c92-5e3fa06d4d4c.png → 4b595d09-a5ed-47d6-9c7b-e471792db801.png} +0 -0
- /kotonebot/kaa/sprites/{15ce2944-3d27-4073-b969-2ec8fc98ceb4.png → 4e284d43-9d58-4afa-be66-b61825ef2be3.png} +0 -0
- /kotonebot/kaa/sprites/{aa55089d-7b80-4763-a226-cde10e56f8a5.png → 50f138f4-7500-42c1-8121-2f03703d8f8f.png} +0 -0
- /kotonebot/kaa/sprites/{e8935f50-3109-4d98-9783-86738763a431.png → 53d082f9-9cac-4ca0-b166-3a3599c4f757.png} +0 -0
- /kotonebot/kaa/sprites/{a6a23fad-cc30-43cd-b869-d2fad70d32ab.png → 5479a383-3e75-4082-a118-fdae784228f4.png} +0 -0
- /kotonebot/kaa/sprites/{64d7e162-a761-458b-a0c6-083658141032.png → 564e9739-a90d-4c17-9d29-b3edb6aef1e9.png} +0 -0
- /kotonebot/kaa/sprites/{14488bad-1e16-47b8-9870-f2e18c6b87ee.png → 5aac4900-ccd2-4a72-9135-0804fe14e6e2.png} +0 -0
- /kotonebot/kaa/sprites/{a885914f-a305-4af3-b2a5-991fdf0101f6.png → 5c926d27-63c7-466f-9e34-65144153e0d2.png} +0 -0
- /kotonebot/kaa/sprites/{e4c40e7a-f67c-45d6-9775-8389bcff0b67.png → 5d51ee71-a2fb-414a-ab48-c5d3c1a3b945.png} +0 -0
- /kotonebot/kaa/sprites/{ef46ae80-8c34-4948-9076-b0536805e7dc.png → 62390db3-c5bc-4868-bfb3-958acceff9cd.png} +0 -0
- /kotonebot/kaa/sprites/{720cfc0e-74a2-4239-bc08-ea9927871cd0.png → 634b1421-7f65-452c-a4e2-e40a5028938a.png} +0 -0
- /kotonebot/kaa/sprites/{130ee78a-c201-4fa0-bac5-7be0b842312d.png → 6588da9e-a9b5-4313-9f67-e03f213f3fa4.png} +0 -0
- /kotonebot/kaa/sprites/{2c43b51a-7ca5-4401-a05f-d3b3de17c2d3.png → 66eee7a5-3d0e-430f-850b-7fff14b3671f.png} +0 -0
- /kotonebot/kaa/sprites/{54a7603e-fd84-4d7f-99ef-f95d3695aa42.png → 67176e48-eaa5-46dd-bbaf-85b1b324ba48.png} +0 -0
- /kotonebot/kaa/sprites/{079cdbed-7171-42e3-8298-9d1e180982ec.png → 6774c674-5100-4422-a82b-deb9bd5d49ee.png} +0 -0
- /kotonebot/kaa/sprites/{73eec0a3-e3ba-40c8-b163-321a5b7feb81.png → 6e9ef52c-937f-47f1-9687-899a528d7599.png} +0 -0
- /kotonebot/kaa/sprites/{1f8cca6a-ae0a-44c9-a267-989ae508320a.png → 704bf40a-4125-4260-9dd7-fa8ac13f00df.png} +0 -0
- /kotonebot/kaa/sprites/{07c5517b-38f7-44e6-8506-84317ba0fb86.png → 71bbe862-b9f7-47ab-b4f1-f0b87732bd39.png} +0 -0
- /kotonebot/kaa/sprites/{ca850faa-154e-4170-9446-91dd325e14af.png → 7516da41-7cbf-4c18-8630-3baecc225764.png} +0 -0
- /kotonebot/kaa/sprites/{d9432d63-1aef-43a7-8642-d10f3c15b092.png → 75f0339c-9acf-4971-a3c2-e302f56b1f93.png} +0 -0
- /kotonebot/kaa/sprites/{fbe45406-81bd-4298-ab4f-ed7346c25eb8.png → 76a65fb7-4429-4288-a164-bd121974ee6b.png} +0 -0
- /kotonebot/kaa/sprites/{82eab6fc-1968-42a4-bb43-d9cee984b33d.png → 783cbcad-eefc-4a04-910e-9ff4288d3c18.png} +0 -0
- /kotonebot/kaa/sprites/{d5a25a5f-8bd0-4f09-aec7-fda24eaf795e.png → 78a12e3b-ac32-4e96-8998-30f92318a36b.png} +0 -0
- /kotonebot/kaa/sprites/{71293cd1-83de-4f15-9608-1d31678e3566.png → 7cddb93a-175c-4875-a2fb-136cdfc365a7.png} +0 -0
- /kotonebot/kaa/sprites/{54e4f9a3-3ae6-4bf4-85b1-680889835137.png → 7d817b98-53ff-491c-b608-b07a0c143009.png} +0 -0
- /kotonebot/kaa/sprites/{214fad37-3e64-4786-8cfa-b48dd49ddbe4.png → 8034f626-ae01-42c0-8f73-a3d1c9aaff5c.png} +0 -0
- /kotonebot/kaa/sprites/{4c07fc6b-662a-4216-b1e6-6036fa6f717d.png → 824c9efd-21ea-4e26-a1fa-9e909d8b98d6.png} +0 -0
- /kotonebot/kaa/sprites/{a0fc1501-162d-49c6-824c-03e028d8fed7.png → 835e3ad1-8f73-4e2e-bdd5-9a5fb866858f.png} +0 -0
- /kotonebot/kaa/sprites/{ed822aca-dde6-4235-8776-0c47884c4a9a.png → 84795df2-e6d9-40fb-aef5-98fbf9c17399.png} +0 -0
- /kotonebot/kaa/sprites/{da7ef120-103c-4d5f-b95c-2bcd29757d3c.png → 848c8b04-c953-473d-94b1-2a2d5cdbd9c4.png} +0 -0
- /kotonebot/kaa/sprites/{0b27cdd2-490b-4a6a-ae0d-788ac1601dcc.png → 8498ac20-4ec2-474b-961f-cbf488da9a23.png} +0 -0
- /kotonebot/kaa/sprites/{1135ed8d-4e1c-4896-9d6d-5c2ba3d29761.png → 85f1cf4f-7d07-403a-917b-02b273680c21.png} +0 -0
- /kotonebot/kaa/sprites/{fb2694c2-8f0e-4ec3-9d76-087f085f2e55.png → 86db7d47-f634-4be4-b9e2-371e7868aded.png} +0 -0
- /kotonebot/kaa/sprites/{6ede6499-0efe-4ad2-83c7-5fd8a512c52e.png → 88d89e04-2242-4ed7-be23-edd6535121ac.png} +0 -0
- /kotonebot/kaa/sprites/{b22260e3-22c6-4c80-b986-f4fd8db22ddc.png → 8cb9d744-6b49-452b-b0b6-e441446050ef.png} +0 -0
- /kotonebot/kaa/sprites/{b176f60c-94ba-46e3-b562-7fc86b25c17f.png → 8df4515c-ff60-432c-a624-ae3658bf7e0c.png} +0 -0
- /kotonebot/kaa/sprites/{1d5835f8-593c-4ec4-a360-81fce8d2f959.png → 8e6b9237-f94a-4e21-9b2c-45e3d4833b6d.png} +0 -0
- /kotonebot/kaa/sprites/{ed56bfc1-d3c5-4bc3-a910-f861cfb2f379.png → 8e7b53fd-d962-43b7-a203-3d480c649c83.png} +0 -0
- /kotonebot/kaa/sprites/{6b33fe3c-28ff-49ad-ba24-7279c8e9ec19.png → 8ed3f006-facb-4ba0-9034-24a3a7729012.png} +0 -0
- /kotonebot/kaa/sprites/{918db28b-0d43-4056-a506-3279f2b724c8.png → 91e2c2d3-b629-4c49-97d5-ed99dada3243.png} +0 -0
- /kotonebot/kaa/sprites/{2ac9bca3-aad6-4d19-a4b7-4d7197d95fba.png → 92c1a9ba-994b-4635-b1b6-1fa157f227f6.png} +0 -0
- /kotonebot/kaa/sprites/{757d08d7-c7a1-430a-8938-edd824ed7117.png → 981e63c5-d615-44dd-9ad6-60f6b415cdaf.png} +0 -0
- /kotonebot/kaa/sprites/{99967c02-b5cf-43ba-9ca6-23e2781b25d9.png → 98a8e860-39cf-416c-b435-64a33579c6e8.png} +0 -0
- /kotonebot/kaa/sprites/{350736d7-0774-4a48-973c-d9373fc68ea3.png → 9932dfd8-7c97-47dd-b6bb-e8c8d593f762.png} +0 -0
- /kotonebot/kaa/sprites/{88476c65-0056-4ae4-9c9e-3ff1bae964e8.png → 9a275932-f760-4373-ab27-86c5caf19136.png} +0 -0
- /kotonebot/kaa/sprites/{07d78d3e-4e79-459e-9c41-43f4a618f9e9.png → 9a7f06a5-448b-4410-84fa-0a4c938620f7.png} +0 -0
- /kotonebot/kaa/sprites/{f9bba6f1-6237-43bf-85b1-f6250a64a5d6.png → 9cdd7af5-0e25-4226-8c7b-93c8c633c27b.png} +0 -0
- /kotonebot/kaa/sprites/{0899e636-b767-45e6-ab63-258d19d3f806.png → a0ddc404-a653-4d76-842f-faf7f93851ed.png} +0 -0
- /kotonebot/kaa/sprites/{74c8b69c-bceb-438f-a4a4-49e3abd7fa46.png → a1087827-1065-4f35-b04f-854ddf2d7e70.png} +0 -0
- /kotonebot/kaa/sprites/{1ae6b793-d85f-4b06-ba9f-bdb7fbed26fc.png → a3f07286-a699-4f5c-9912-835b3781b4f7.png} +0 -0
- /kotonebot/kaa/sprites/{93f74a70-acd1-4453-8254-07a797839b5f.png → a4aabbbe-6400-4bcb-a95f-32a7d611bf5b.png} +0 -0
- /kotonebot/kaa/sprites/{b3e5704b-63c9-4226-9e49-69c680627b61.png → a4b50bf5-7dfe-4bbb-8bd7-528c9147b71e.png} +0 -0
- /kotonebot/kaa/sprites/{b3debf96-a90b-4de7-b19e-83c2d82075ee.png → a4c42000-2421-4b02-b83e-60e1397304b0.png} +0 -0
- /kotonebot/kaa/sprites/{b66ed448-356e-44f9-ad45-40473d47ee24.png → a8aacbc9-1238-414c-b1e6-5ea1a01407c2.png} +0 -0
- /kotonebot/kaa/sprites/{141b5f13-489d-4271-ac49-4d0bd40bf8fc.png → a99307de-c12f-4cf5-921b-b80bf03bbac3.png} +0 -0
- /kotonebot/kaa/sprites/{aed0fd9a-0e59-4ead-b6a2-497b94f0eb16.png → ac02de52-42fa-4767-81f8-97fbac3bd8a0.png} +0 -0
- /kotonebot/kaa/sprites/{d597a32e-5ccb-4550-ab18-1905123c22d4.png → aee9d67f-d6be-4cf5-9c30-331f6d5f0f84.png} +0 -0
- /kotonebot/kaa/sprites/{07578d0c-15d4-42a2-9db1-a1c0c11b55c1.png → b45b4340-65ce-49df-a265-9f3cd876fced.png} +0 -0
- /kotonebot/kaa/sprites/{4183bf72-4ca7-4480-a6db-c81632b1a62b.png → b53035c7-43a6-4d83-a51c-dd6b7cd14a1e.png} +0 -0
- /kotonebot/kaa/sprites/{1abdc520-6123-40c9-bf50-d84e46f9420c.png → b54343ba-8b17-4d72-b379-805ae3062d86.png} +0 -0
- /kotonebot/kaa/sprites/{49fa1fd6-8115-476d-aa60-2d63613ef931.png → b94087df-db46-4ae3-bf93-8548a25a1a23.png} +0 -0
- /kotonebot/kaa/sprites/{00a2e0d4-1683-4c36-88df-081673e2fe1a.png → bd101208-a87c-405c-987a-d46e1b6f0358.png} +0 -0
- /kotonebot/kaa/sprites/{471d7204-23f3-4d72-a852-77e8b424ddff.png → be2c3ab5-9d63-47bc-93f1-110b9668d5e2.png} +0 -0
- /kotonebot/kaa/sprites/{af5714a6-e4a0-47ef-9151-2a8c9614e931.png → c41567a3-84bf-4e71-9eb1-f577c0348215.png} +0 -0
- /kotonebot/kaa/sprites/{1466ba09-8e27-49cd-8606-f9feeecc2915.png → c5127f24-fa81-4d61-876f-ac0a377bf00e.png} +0 -0
- /kotonebot/kaa/sprites/{2e279b36-1057-453f-9a7e-7ac61ddce6f9.png → c542ba3e-e0c0-41a1-8cc7-dd7454b12400.png} +0 -0
- /kotonebot/kaa/sprites/{a2e9d3a5-6f6f-4530-8a35-a09edfd35b8e.png → c6649b6a-7d03-454c-902b-7462092878df.png} +0 -0
- /kotonebot/kaa/sprites/{32d066ef-5783-4ab4-8a41-5e948169b1d7.png → cf5dcb2b-c5bd-4e38-a2bb-2673db821f79.png} +0 -0
- /kotonebot/kaa/sprites/{48fc4fee-0d6e-4995-8d29-37791d33759e.png → d37153d2-f699-4608-abbf-43d6bd8b1469.png} +0 -0
- /kotonebot/kaa/sprites/{be0bca2e-dfd5-48b6-a2ac-e2699991d37b.png → d3bfc1c2-a202-42c2-9e19-61b949a340c7.png} +0 -0
- /kotonebot/kaa/sprites/{368d245a-8777-437a-80c4-e6b0504236e6.png → d5ad9b97-3175-4c49-a1f7-5da663125af3.png} +0 -0
- /kotonebot/kaa/sprites/{864b57b0-c2f9-49eb-864c-314f72c0f56c.png → d5c4ef47-257f-49a2-81e3-ba7ab6fa0f62.png} +0 -0
- /kotonebot/kaa/sprites/{917be8d3-602c-495c-b2ed-41b1c84e7398.png → d7ceaf00-e488-4273-968c-315962bf4837.png} +0 -0
- /kotonebot/kaa/sprites/{d40a6e09-4740-41a8-af0f-9da09de38bf1.png → d7e25596-8452-4eb3-aaa8-5997be3dd851.png} +0 -0
- /kotonebot/kaa/sprites/{3bf9aa00-7c6d-46ec-b487-7f846588acbe.png → db4ca499-5cd3-4332-b232-28ddbedd4741.png} +0 -0
- /kotonebot/kaa/sprites/{f404eabd-6b87-48a4-8ad7-1e7d521daa94.png → e0effef4-869d-4a0c-8db3-1c41cd255555.png} +0 -0
- /kotonebot/kaa/sprites/{71ce4a03-5865-47fb-a2a2-d220dbd8ead3.png → e8407109-ffa8-496b-a499-e78db90db540.png} +0 -0
- /kotonebot/kaa/sprites/{0e998848-beb2-4d31-9019-6afab9e0180e.png → e857f00d-81bd-4fbc-9043-c9252a075da3.png} +0 -0
- /kotonebot/kaa/sprites/{550c0ad2-4c38-4c34-8be2-9ea278b3f822.png → e872aa76-2947-4209-abd7-5ecb56fdc9d6.png} +0 -0
- /kotonebot/kaa/sprites/{a9e30963-0772-401a-85f8-33369ca22267.png → ea7dd69b-b02f-499d-acee-6bd35a033a73.png} +0 -0
- /kotonebot/kaa/sprites/{4365cb24-54a1-4998-8a2e-bed02fc988f5.png → f1fcc488-584d-4c61-8489-8b1b539151a9.png} +0 -0
- /kotonebot/kaa/sprites/{a7cc8346-8b35-4f6a-acef-8cd4d29b5591.png → f62bfba7-3d6b-4bdd-9821-ca8370ee2ff4.png} +0 -0
- /kotonebot/kaa/sprites/{2e5cfcf0-34fc-4b17-9283-0c269d04ae98.png → f7084b2c-5411-4180-9404-377240af1857.png} +0 -0
- /kotonebot/kaa/sprites/{8e021860-0c8f-4da5-84f8-1ed65ad6f720.png → f7c7f2cf-337b-4dd6-a90b-7f5c452a1640.png} +0 -0
- /kotonebot/kaa/sprites/{12b811a3-5b37-4510-9ebd-95455644f253.png → fbba87fb-50e5-4c2f-9218-82f1ffb7a5ba.png} +0 -0
- /kotonebot/kaa/sprites/{9dfde42d-fd40-435b-8a41-50be0fb8781e.png → fc7e4b97-0d87-4de9-b7ac-87ca670b6ff2.png} +0 -0
- /kotonebot/kaa/sprites/{63b1d3d9-a0d7-413e-8e67-215ee46e5af7.png → fe0a26ac-906c-4809-9de5-43cb4a467a9d.png} +0 -0
- /kotonebot/kaa/sprites/{5b3f7210-d28b-4117-a664-efb790eec911.png → ff232b25-39b4-4dcb-9e21-1d82b9e0bb7d.png} +0 -0
- {ksaa-2025.8.17.0.dist-info → ksaa-2025.9b1.dist-info}/WHEEL +0 -0
- {ksaa-2025.8.17.0.dist-info → ksaa-2025.9b1.dist-info}/entry_points.txt +0 -0
- {ksaa-2025.8.17.0.dist-info → ksaa-2025.9b1.dist-info}/licenses/LICENSE +0 -0
- {ksaa-2025.8.17.0.dist-info → ksaa-2025.9b1.dist-info}/top_level.txt +0 -0
|
@@ -12,7 +12,7 @@ from ..actions.scenes import goto_home, goto_shop, at_daily_shop
|
|
|
12
12
|
|
|
13
13
|
logger = logging.getLogger(__name__)
|
|
14
14
|
|
|
15
|
-
@action('购买 Money 物品', screenshot_mode='manual
|
|
15
|
+
@action('购买 Money 物品', screenshot_mode='manual')
|
|
16
16
|
def money_items2(items: Optional[list[DailyMoneyShopItems]] = None):
|
|
17
17
|
"""
|
|
18
18
|
购买 Money 物品
|
|
@@ -59,7 +59,7 @@ def money_items2(items: Optional[list[DailyMoneyShopItems]] = None):
|
|
|
59
59
|
if items:
|
|
60
60
|
logger.info(f'{len(items)} item(s) not purchased/already purchased: {", ".join([item.to_ui_text(item) for item in items])}')
|
|
61
61
|
|
|
62
|
-
@action('购买推荐商品', screenshot_mode='manual
|
|
62
|
+
@action('购买推荐商品', screenshot_mode='manual')
|
|
63
63
|
def dispatch_recommended_items():
|
|
64
64
|
"""
|
|
65
65
|
购买推荐商品
|
|
@@ -194,13 +194,11 @@ def purchase():
|
|
|
194
194
|
if image.find(R.Daily.ButtonRefreshMoneyShop):
|
|
195
195
|
logger.info('Refreshing money shop.')
|
|
196
196
|
device.click()
|
|
197
|
-
sleep(0.5)
|
|
198
197
|
# 等待刷新完成
|
|
199
198
|
for _ in Loop():
|
|
200
199
|
if not image.find(R.Daily.ButtonRefreshMoneyShop):
|
|
201
200
|
break
|
|
202
201
|
logger.debug('Waiting for money shop refresh...')
|
|
203
|
-
device.screenshot()
|
|
204
202
|
money_items2()
|
|
205
203
|
sleep(0.5)
|
|
206
204
|
else:
|
|
@@ -9,6 +9,7 @@ from cv2.typing import MatLike
|
|
|
9
9
|
from kotonebot.kaa.tasks import R
|
|
10
10
|
from kotonebot.kaa.config import conf
|
|
11
11
|
from kotonebot.kaa.game_ui import dialog
|
|
12
|
+
from kotonebot.kaa.tasks.produce.common import acquisition_date_change_dialog
|
|
12
13
|
from kotonebot.kaa.util.trace import trace
|
|
13
14
|
from kotonebot.primitives import RectTuple, Rect
|
|
14
15
|
from kotonebot import action, Interval, Countdown, device, image, sleep, ocr, contains, use_screenshot, color
|
|
@@ -188,6 +189,8 @@ def do_cards(
|
|
|
188
189
|
device.double_click(Rect(xywh=card_rect[:4]))
|
|
189
190
|
sleep(2)
|
|
190
191
|
timeout_cd.reset()
|
|
192
|
+
# 日期变更检测
|
|
193
|
+
acquisition_date_change_dialog()
|
|
191
194
|
# 结束条件
|
|
192
195
|
if card_count == 0 and end_predicate():
|
|
193
196
|
if not break_cd.started:
|
|
@@ -11,6 +11,7 @@ from kotonebot import (
|
|
|
11
11
|
Interval,
|
|
12
12
|
)
|
|
13
13
|
from kotonebot.kaa.config.schema import produce_solution
|
|
14
|
+
from kotonebot.kaa.tasks.start_game import wait_for_home
|
|
14
15
|
from kotonebot.primitives import Rect
|
|
15
16
|
from kotonebot.kaa.tasks import R
|
|
16
17
|
from .p_drink import acquire_p_drink
|
|
@@ -150,6 +151,63 @@ def handle_skill_card_removal():
|
|
|
150
151
|
break
|
|
151
152
|
logger.debug("Handle skill card removal finished.")
|
|
152
153
|
|
|
154
|
+
@action('继续当前培育.进入培育', screenshot_mode='manual-inherit')
|
|
155
|
+
def resume_produce_pre() -> tuple[Literal['regular', 'pro', 'master'], int]:
|
|
156
|
+
"""
|
|
157
|
+
继续当前培育.进入培育\n
|
|
158
|
+
该函数用于处理‘日期变更’等情况;单独执行此函数时,要确保代码已经处于培育状态。
|
|
159
|
+
|
|
160
|
+
前置条件:游戏首页,且当前有进行中培育\n
|
|
161
|
+
结束状态:培育中的任意一个页面
|
|
162
|
+
"""
|
|
163
|
+
device.screenshot()
|
|
164
|
+
# 点击 プロデュース中
|
|
165
|
+
# [res/sprites/jp/daily/home_1.png]
|
|
166
|
+
logger.info('Click ongoing produce button.')
|
|
167
|
+
device.click(R.Produce.BoxProduceOngoing)
|
|
168
|
+
btn_resume = image.expect_wait(R.Produce.ButtonResume)
|
|
169
|
+
# 判断信息
|
|
170
|
+
mode_result = image.find_multi([
|
|
171
|
+
R.Produce.ResumeDialogRegular,
|
|
172
|
+
R.Produce.ResumeDialogPro,
|
|
173
|
+
R.Produce.ResumeDialogMaster
|
|
174
|
+
])
|
|
175
|
+
if not mode_result:
|
|
176
|
+
raise ValueError('Failed to detect produce mode.')
|
|
177
|
+
if mode_result.index == 0:
|
|
178
|
+
mode = 'regular'
|
|
179
|
+
elif mode_result.index == 1:
|
|
180
|
+
mode = 'pro'
|
|
181
|
+
else:
|
|
182
|
+
mode = 'master'
|
|
183
|
+
logger.info(f'Produce mode: {mode}')
|
|
184
|
+
retry_count = 0
|
|
185
|
+
max_retries = 5
|
|
186
|
+
current_week = None
|
|
187
|
+
while retry_count < max_retries:
|
|
188
|
+
week_text = ocr.ocr(R.Produce.BoxResumeDialogWeeks, lang='en').squash().regex(r'\d+/\d+')
|
|
189
|
+
if week_text:
|
|
190
|
+
weeks = week_text[0].split('/')
|
|
191
|
+
logger.info(f'Current week: {weeks[0]}/{weeks[1]}')
|
|
192
|
+
if len(weeks) >= 2:
|
|
193
|
+
current_week = int(weeks[0])
|
|
194
|
+
break
|
|
195
|
+
retry_count += 1
|
|
196
|
+
logger.warning(f'Failed to detect weeks. week_text="{week_text}". Retrying... ({retry_count}/{max_retries})')
|
|
197
|
+
sleep(0.5)
|
|
198
|
+
device.screenshot()
|
|
199
|
+
|
|
200
|
+
if retry_count >= max_retries:
|
|
201
|
+
raise ValueError('Failed to detect weeks after multiple retries.')
|
|
202
|
+
if current_week is None:
|
|
203
|
+
raise ValueError('Failed to detect current_week.')
|
|
204
|
+
# 点击 再開する
|
|
205
|
+
# [kotonebot-resource/sprites/jp/produce/produce_resume.png]
|
|
206
|
+
logger.info('Click resume button.')
|
|
207
|
+
device.click(btn_resume)
|
|
208
|
+
|
|
209
|
+
return mode, current_week
|
|
210
|
+
|
|
153
211
|
AcquisitionType = Literal[
|
|
154
212
|
"PDrinkAcquire", # P饮料被动领取
|
|
155
213
|
"PDrinkSelect", # P饮料主动领取
|
|
@@ -167,7 +225,31 @@ AcquisitionType = Literal[
|
|
|
167
225
|
"NetworkError", # 网络中断弹窗
|
|
168
226
|
"SkipCommu", # 跳过交流
|
|
169
227
|
"Loading", # 加载画面
|
|
228
|
+
"DateChange", # 日期变更
|
|
170
229
|
]
|
|
230
|
+
|
|
231
|
+
def acquisition_date_change_dialog() -> AcquisitionType | None:
|
|
232
|
+
"""
|
|
233
|
+
检测是否执行了日期变更。\n
|
|
234
|
+
如果出现了日期变更,则对日期变更直接进行处理(返回标题、进入游戏、重进培育)\n
|
|
235
|
+
注:不更新屏幕截图。
|
|
236
|
+
"""
|
|
237
|
+
|
|
238
|
+
# 日期变更(可以考虑加入版本更新,但因为我目前没有版本更新的720x1080素材,所以没法加)
|
|
239
|
+
logger.debug("Check date change dialog...")
|
|
240
|
+
if image.find(R.Daily.TextDateChangeDialog):
|
|
241
|
+
logger.info("Date change dialog found.")
|
|
242
|
+
# 点击确认
|
|
243
|
+
device.click(image.expect(R.Daily.TextDateChangeDialogConfirmButton))
|
|
244
|
+
# 进入游戏
|
|
245
|
+
# 注:wait_for_home()里的Loop类第一次进入循环体时,会自动执行device.screenshot()
|
|
246
|
+
wait_for_home()
|
|
247
|
+
# 重进培育
|
|
248
|
+
resume_produce_pre()
|
|
249
|
+
return "DateChange"
|
|
250
|
+
|
|
251
|
+
return None
|
|
252
|
+
|
|
171
253
|
@measure_time()
|
|
172
254
|
@action('处理培育事件', screenshot_mode='manual')
|
|
173
255
|
def fast_acquisitions() -> AcquisitionType | None:
|
|
@@ -264,6 +346,12 @@ def fast_acquisitions() -> AcquisitionType | None:
|
|
|
264
346
|
return "PItemSelect"
|
|
265
347
|
device.click(10, 10)
|
|
266
348
|
|
|
349
|
+
# 日期变更
|
|
350
|
+
result = acquisition_date_change_dialog()
|
|
351
|
+
if result is not None:
|
|
352
|
+
return result
|
|
353
|
+
device.click(10, 10)
|
|
354
|
+
|
|
267
355
|
return None
|
|
268
356
|
|
|
269
357
|
def until_acquisition_clear():
|
|
@@ -760,7 +760,7 @@ def hajime_from_stage(stage: ProduceStage, type: Literal['regular', 'pro', 'mast
|
|
|
760
760
|
开始 Regular 培育。
|
|
761
761
|
"""
|
|
762
762
|
if stage == 'action':
|
|
763
|
-
texts = ocr.ocr(rect=R.InPurodyuusu.BoxWeeksUntilExam)
|
|
763
|
+
texts = ocr.ocr(rect=R.InPurodyuusu.BoxWeeksUntilExam, lang='en')
|
|
764
764
|
# 提取周数
|
|
765
765
|
remaining_week = texts.squash().replace('ó', '6').numbers()
|
|
766
766
|
if not remaining_week:
|
|
@@ -781,10 +781,10 @@ def hajime_from_stage(stage: ProduceStage, type: Literal['regular', 'pro', 'mast
|
|
|
781
781
|
function = hajime_master
|
|
782
782
|
case _:
|
|
783
783
|
assert_never(type)
|
|
784
|
-
if
|
|
784
|
+
if image.find(R.InPurodyuusu.TextMidExamRemaining):
|
|
785
785
|
week = MID_WEEK - remaining_week[0]
|
|
786
786
|
function(start_from=week)
|
|
787
|
-
elif
|
|
787
|
+
elif image.find(R.InPurodyuusu.TextFinalExamRemaining):
|
|
788
788
|
week = FINAL_WEEK - remaining_week[0]
|
|
789
789
|
function(start_from=week)
|
|
790
790
|
else:
|
|
@@ -242,12 +242,18 @@ def is_rest_available():
|
|
|
242
242
|
def rest():
|
|
243
243
|
"""执行休息"""
|
|
244
244
|
logger.info("Rest for this week.")
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
245
|
+
|
|
246
|
+
# 部分设备上,第二次click(确定)点击速度过快,导致卡死,所以这里需要添加一个sleep
|
|
247
|
+
device.click(image.expect(R.InPurodyuusu.Rest))
|
|
248
|
+
sleep(0.5)
|
|
249
|
+
device.click(image.expect(R.InPurodyuusu.RestConfirmBtn))
|
|
250
|
+
# 原方案
|
|
251
|
+
# (SimpleDispatcher('in_produce.rest')
|
|
252
|
+
# # 点击休息
|
|
253
|
+
# .click(R.InPurodyuusu.Rest)
|
|
254
|
+
# # 确定
|
|
255
|
+
# .click(R.InPurodyuusu.RestConfirmBtn, finish=True)
|
|
256
|
+
# ).run()
|
|
251
257
|
|
|
252
258
|
@action('判断是否处于行动页面')
|
|
253
259
|
def at_action_scene():
|
|
@@ -3,6 +3,7 @@ from typing import Optional, Literal
|
|
|
3
3
|
from typing_extensions import assert_never
|
|
4
4
|
|
|
5
5
|
from kotonebot.kaa.config.schema import produce_solution
|
|
6
|
+
from kotonebot.kaa.tasks.produce.common import resume_produce_pre
|
|
6
7
|
from kotonebot.ui import user
|
|
7
8
|
from kotonebot.kaa.tasks import R
|
|
8
9
|
from kotonebot.kaa.config import conf
|
|
@@ -118,60 +119,23 @@ def select_set(index: int):
|
|
|
118
119
|
logger.warning(f'Failed to navigate to set #{index}. Current set is #{final_current}. Retrying... ({retry_count}/{max_retries})')
|
|
119
120
|
|
|
120
121
|
logger.error(f'Failed to navigate to set #{index} after {max_retries} retries.')
|
|
121
|
-
|
|
122
|
-
@action('
|
|
123
|
-
def
|
|
122
|
+
|
|
123
|
+
@action('继续当前培育.继续培育', screenshot_mode='manual-inherit')
|
|
124
|
+
def resume_produce_lst(
|
|
125
|
+
mode: Literal['regular', 'pro', 'master'],
|
|
126
|
+
current_week: int
|
|
127
|
+
):
|
|
124
128
|
"""
|
|
125
|
-
|
|
129
|
+
继续当前培育.继续培育\n
|
|
130
|
+
该函数正常情况不应该被单独调用。
|
|
126
131
|
|
|
127
|
-
|
|
132
|
+
前置条件:培育中的任意一个页面\n
|
|
128
133
|
结束状态:游戏首页
|
|
134
|
+
|
|
135
|
+
:param mode: 培育模式
|
|
136
|
+
:param current_week: 培育的周数
|
|
129
137
|
"""
|
|
130
|
-
|
|
131
|
-
# 点击 プロデュース中
|
|
132
|
-
# [res/sprites/jp/daily/home_1.png]
|
|
133
|
-
logger.info('Click ongoing produce button.')
|
|
134
|
-
device.click(R.Produce.BoxProduceOngoing)
|
|
135
|
-
btn_resume = image.expect_wait(R.Produce.ButtonResume)
|
|
136
|
-
# 判断信息
|
|
137
|
-
mode_result = image.find_multi([
|
|
138
|
-
R.Produce.ResumeDialogRegular,
|
|
139
|
-
R.Produce.ResumeDialogPro,
|
|
140
|
-
R.Produce.ResumeDialogMaster
|
|
141
|
-
])
|
|
142
|
-
if not mode_result:
|
|
143
|
-
raise ValueError('Failed to detect produce mode.')
|
|
144
|
-
if mode_result.index == 0:
|
|
145
|
-
mode = 'regular'
|
|
146
|
-
elif mode_result.index == 1:
|
|
147
|
-
mode = 'pro'
|
|
148
|
-
else:
|
|
149
|
-
mode = 'master'
|
|
150
|
-
logger.info(f'Produce mode: {mode}')
|
|
151
|
-
retry_count = 0
|
|
152
|
-
max_retries = 5
|
|
153
|
-
current_week = None
|
|
154
|
-
while retry_count < max_retries:
|
|
155
|
-
week_text = ocr.ocr(R.Produce.BoxResumeDialogWeeks, lang='en').squash().regex(r'\d+/\d+')
|
|
156
|
-
if week_text:
|
|
157
|
-
weeks = week_text[0].split('/')
|
|
158
|
-
logger.info(f'Current week: {weeks[0]}/{weeks[1]}')
|
|
159
|
-
if len(weeks) >= 2:
|
|
160
|
-
current_week = int(weeks[0])
|
|
161
|
-
break
|
|
162
|
-
retry_count += 1
|
|
163
|
-
logger.warning(f'Failed to detect weeks. week_text="{week_text}". Retrying... ({retry_count}/{max_retries})')
|
|
164
|
-
sleep(0.5)
|
|
165
|
-
device.screenshot()
|
|
166
|
-
|
|
167
|
-
if retry_count >= max_retries:
|
|
168
|
-
raise ValueError('Failed to detect weeks after multiple retries.')
|
|
169
|
-
if current_week is None:
|
|
170
|
-
raise ValueError('Failed to detect current_week.')
|
|
171
|
-
# 点击 再開する
|
|
172
|
-
# [kotonebot-resource/sprites/jp/produce/produce_resume.png]
|
|
173
|
-
logger.info('Click resume button.')
|
|
174
|
-
device.click(btn_resume)
|
|
138
|
+
|
|
175
139
|
match mode:
|
|
176
140
|
case 'regular':
|
|
177
141
|
resume_regular_produce(current_week)
|
|
@@ -181,6 +145,19 @@ def resume_produce():
|
|
|
181
145
|
resume_master_produce(current_week)
|
|
182
146
|
case _:
|
|
183
147
|
assert_never(mode)
|
|
148
|
+
|
|
149
|
+
@action('继续当前培育', screenshot_mode='manual-inherit')
|
|
150
|
+
def resume_produce():
|
|
151
|
+
"""
|
|
152
|
+
继续当前培育
|
|
153
|
+
|
|
154
|
+
前置条件:游戏首页,且当前有进行中培育\n
|
|
155
|
+
结束状态:游戏首页
|
|
156
|
+
"""
|
|
157
|
+
|
|
158
|
+
mode, current_week = resume_produce_pre()
|
|
159
|
+
|
|
160
|
+
resume_produce_lst(mode, current_week)
|
|
184
161
|
|
|
185
162
|
@action('执行培育', screenshot_mode='manual-inherit')
|
|
186
163
|
def do_produce(
|
|
@@ -198,10 +175,10 @@ def do_produce(
|
|
|
198
175
|
:param idol_skin_id: 要培育的偶像。如果为 None,则使用配置文件中的偶像。
|
|
199
176
|
:param mode: 培育模式。
|
|
200
177
|
:return: 是否因为 AP 不足而跳过本次培育。
|
|
201
|
-
:raises ValueError: 如果 `memory_set_index` 不在 [1,
|
|
178
|
+
:raises ValueError: 如果 `memory_set_index` 不在 [1, 20] 的范围内。
|
|
202
179
|
"""
|
|
203
|
-
if memory_set_index is not None and not 1 <= memory_set_index <=
|
|
204
|
-
raise ValueError('`memory_set_index` must be in range [1,
|
|
180
|
+
if memory_set_index is not None and not 1 <= memory_set_index <= 20:
|
|
181
|
+
raise ValueError('`memory_set_index` must be in range [1, 20].')
|
|
205
182
|
|
|
206
183
|
if not at_home():
|
|
207
184
|
goto_home()
|
|
@@ -209,9 +186,13 @@ def do_produce(
|
|
|
209
186
|
device.screenshot()
|
|
210
187
|
# 点击培育按钮,然后判断是新开还是再开培育
|
|
211
188
|
for _ in Loop(interval=0.6):
|
|
212
|
-
if image.find(R.Produce.
|
|
189
|
+
if image.find(R.Produce.LogoHajime): # Hajime培育界面
|
|
213
190
|
# 新开
|
|
214
191
|
break
|
|
192
|
+
elif image.find(R.Produce.LogoNia): # NIA培育界面
|
|
193
|
+
device.click(R.Produce.PointNiaToHajime)
|
|
194
|
+
sleep(0.5)
|
|
195
|
+
continue
|
|
215
196
|
elif image.find(R.Produce.ButtonResume):
|
|
216
197
|
# 再开
|
|
217
198
|
resume_produce()
|
|
@@ -250,7 +231,7 @@ def do_produce(
|
|
|
250
231
|
# [kotonebot-resource\sprites\jp\produce\screenshot_no_enough_ap_3.png]
|
|
251
232
|
logger.info('AP insufficient. Try to use AP drink.')
|
|
252
233
|
for _ in Loop():
|
|
253
|
-
if image.find(R.Produce.ButtonUse):
|
|
234
|
+
if image.find(R.Produce.ButtonUse, colored=True):
|
|
254
235
|
device.click()
|
|
255
236
|
elif image.find(R.Produce.ButtonRefillAP):
|
|
256
237
|
device.click()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ksaa
|
|
3
|
-
Version: 2025.
|
|
3
|
+
Version: 2025.9b1
|
|
4
4
|
Summary: Kotones Auto Assistant(kaa) is a script for game 'Gakuen Idol M@ster' that automates the dailies and produces.
|
|
5
5
|
Requires-Python: ~=3.10
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -27,39 +27,58 @@ Requires-Dist: numpy<2.0
|
|
|
27
27
|
Requires-Dist: pywin32==310
|
|
28
28
|
Requires-Dist: ahk==1.8.3
|
|
29
29
|
Requires-Dist: win11toast==0.35
|
|
30
|
+
Requires-Dist: keyboard==0.13.5
|
|
30
31
|
Dynamic: license-file
|
|
31
32
|
|
|
32
33
|
# Kotone's Auto Assistant 琴音小助手
|
|
33
34
|
## 功能
|
|
34
35
|
* 自动日常,包括
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
*
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
* 对于非练习周,如果没有推荐休息,暂时只会按顺序执行活动支给(活動支給)、文化课(授業)、外出(おでかけ)、休息这四种,不支持咨询(相談)
|
|
49
|
-
* 领取技能卡和 P 饮料时,固定领取第一个。若 P 饮料溢出,则不领取
|
|
50
|
-
|
|
51
|
-
<sup>1</sup> 见后文的注意事项
|
|
36
|
+
* 领取礼物(邮件)
|
|
37
|
+
* 领取活动费
|
|
38
|
+
* 领取工作奖励并自动重新安排工作
|
|
39
|
+
* 竞赛挑战
|
|
40
|
+
* 领取任务奖励
|
|
41
|
+
* 清空商店(AP 商店和金币商店)
|
|
42
|
+
* 社团奖励
|
|
43
|
+
* 升级一张支援卡
|
|
44
|
+
* 自动培育
|
|
45
|
+
* 支持「初」的三种难度
|
|
46
|
+
* 支持指定偶像
|
|
47
|
+
* 支持使用增强道具(笔记数量和 Pt 数量提升)
|
|
48
|
+
* 暂时**只能使用自动编成**回忆和支援卡
|
|
52
49
|
|
|
53
|
-
##
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
50
|
+
## 免责声明
|
|
51
|
+
**请在使用本项目前仔细阅读以下内容。使用本脚本将带来包括但不限于账号被封禁的风险。**
|
|
52
|
+
|
|
53
|
+
### 总则
|
|
54
|
+
本项目(琴音小助手)是一个为游戏 **《学园偶像大师》(学園アイドルマスター)** 设计的自动操作脚本。本项目的创建目的仅为技术学习与研究,并非为了提供商业服务或鼓励不正当的游戏行为。
|
|
55
|
+
|
|
56
|
+
### 版权声明
|
|
57
|
+
本项目所使用的部分资源文件,包括但不限于图像、音频、模型等,其版权归属于其原始权利人。该游戏的开发商为 **QualiArts**,发行商为**万代南梦宫娱乐(Bandai Namco Entertainment Inc.)**。
|
|
58
|
+
|
|
59
|
+
1. **权利归属**:本项目中使用的所有相关游戏资源文件的版权、商标权及其他一切知识产权,均归 **QualiArts**、**万代南梦宫娱乐**或其相关权利方所有。
|
|
58
60
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
2. **非官方性质**:本项目为非官方、非商业性质的开源项目。本项目的开发者与 **QualiArts** 及 **万代南梦宫娱乐**没有任何形式的关联、合作或官方授权。
|
|
62
|
+
|
|
63
|
+
### 核心风险与责任限制
|
|
64
|
+
1. **账号封禁风险**:**您必须清楚地认识到,使用任何形式的第三方自动操作脚本(包括本项目)都有违反《学园偶像大师》的用户协议(利用規約)的潜在风险。游戏运营商有权对使用此类脚本的账号采取惩罚措施,包括但不限于临时或永久封禁账号。对于因使用本脚本而导致的任何账号损失(如封号、数据回滚等),项目作者概不负责。**
|
|
65
|
+
|
|
66
|
+
> ・对本服务的服务器等进行非法访问、窃取数据、使用使软件进行非法处理的程序、使用工具等获取信息或使用工具等不正当推进游戏的行为。
|
|
67
|
+
|
|
68
|
+
> ・本サービスのサーバー等への不正アクセス行為、データ窃取行為、ソフトウェアに不正な処理を行わせるプログラムを使用する行為、ツール等を使用して情報を取得する行為またはツール等を使用して不正にゲームを有利に進める行為
|
|
69
|
+
|
|
70
|
+
2. **使用限制**:本项目的全部内容**严禁用于任何商业用途或恶意破坏游戏平衡的行为**。任何将本项目用于此类活动的行为,均可能构成对版权方的侵权和对游戏运营商的违约,由此产生的一切法律责任由使用者自行承担。
|
|
61
71
|
|
|
62
|
-
|
|
72
|
+
3. **无担保与责任限制**:本项目按“原样”提供,不附带任何形式的明示或暗示担保,包括其功能的稳定性、准确性或持续可用性。对于因使用或无法使用本项目而导致的任何直接、间接、偶然、特殊或继发性损害(**包括但不限于账号封禁**),项目作者概不负责。
|
|
73
|
+
|
|
74
|
+
**继续下载、安装或使用本项目,即表示您已完全阅读、理解并同意承担以上所有风险和条款。如果您不同意,请立即停止使用并删除本项目的所有相关文件。**
|
|
75
|
+
|
|
76
|
+
## 安装与使用
|
|
77
|
+
参见[【金山文档】使用手册](https://p.kdocs.cn/s/6IJJBRRBAAAFS)。
|
|
78
|
+
|
|
79
|
+
如果你想了解技术细节,可以继续往下阅读。如果只是想要使用 kaa,你可以打开上面的使用手册,关掉这个页面了。
|
|
80
|
+
|
|
81
|
+
## 安装
|
|
63
82
|
琴音小助手通过 pip 分发,因此你可以执行下面的命令来安装:
|
|
64
83
|
```bash
|
|
65
84
|
# Python == 3.10
|
|
@@ -90,58 +109,13 @@ kaa
|
|
|
90
109
|
需要注意的是,配置文件 `config.json` 会自动在工作目录下生成。
|
|
91
110
|
因此你最好每次都在同一个地方运行 kaa,否则可能会出现找不到配置文件的情况。
|
|
92
111
|
|
|
93
|
-
## 使用
|
|
94
|
-
### 配置
|
|
95
|
-
TODO
|
|
96
|
-
|
|
97
|
-
### 注意事项
|
|
98
|
-
> [!IMPORTANT]
|
|
99
|
-
> 建议**使用亲密度至少为 7 的偶像**进行培育,
|
|
100
|
-
> 因为琴音小助手暂时无法处理亲密度提升事件。
|
|
101
|
-
|
|
102
|
-
## 开源协议
|
|
103
|
-
kaa 本体及框架(kotonebot 文件夹)、相关辅助脚本(tools 文件夹)使用 **GPLv3 协议**开源。kaa 开发工具(kotonebot-devtool)、启动器(bootstrap 文件夹)以 **MIT 协议**开源。
|
|
104
|
-
|
|
105
|
-
kaa 的开发主要用到了以下开源项目:
|
|
106
|
-
* [GkmasObjectManager
|
|
107
|
-
](https://github.com/AllenHeartcore/GkmasObjectManager):用于提取游戏图像资源,以 GPLv3 协议开源。
|
|
108
|
-
* [gakumasu-diff](https://github.com/vertesan/gakumasu-diff):游戏数据。
|
|
109
|
-
|
|
110
|
-
kaa 的开发还参考了以下开源项目:
|
|
111
|
-
* [EmulatorExtras](https://github.com/MaaXYZ/EmulatorExtras):MuMu 与雷电模拟器的截图与控制接口定义。
|
|
112
|
-
* [blue_archive_auto_script](https://github.com/pur1fying/blue_archive_auto_script):MuMu 与雷电模拟器的截图与控制接口的 Python 实现,以及各模拟器的控制实现。
|
|
113
|
-
|
|
114
|
-
## 免责声明
|
|
115
|
-
**请在使用本项目前仔细阅读以下内容。使用本脚本将带来包括但不限于账号被封禁的风险。**
|
|
116
|
-
|
|
117
|
-
### 总则
|
|
118
|
-
本项目(琴音小助手)是一个为游戏 **《学园偶像大师》(学園アイドルマスター)** 设计的自动操作脚本。本项目的创建目的仅为技术学习与研究,并非为了提供商业服务或鼓励不正当的游戏行为。
|
|
119
|
-
|
|
120
|
-
### 版权声明
|
|
121
|
-
本项目所使用的部分资源文件,包括但不限于图像、音频、模型等,其版权归属于其原始权利人。该游戏的开发商为 **QualiArts**,发行商为**万代南梦宫娱乐(Bandai Namco Entertainment Inc.)**。
|
|
122
|
-
|
|
123
|
-
1. **权利归属**:本项目中使用的所有相关游戏资源文件的版权、商标权及其他一切知识产权,均归 **QualiArts**、**万代南梦宫娱乐**或其相关权利方所有。
|
|
124
|
-
|
|
125
|
-
2. **非官方性质**:本项目为非官方、非商业性质的开源项目。本项目的开发者与 **QualiArts** 及 **万代南梦宫娱乐**没有任何形式的关联、合作或官方授权。
|
|
126
|
-
|
|
127
|
-
### 核心风险与责任限制
|
|
128
|
-
1. **账号封禁风险**:**您必须清楚地认识到,使用任何形式的第三方自动操作脚本(包括本项目)都有违反《学园偶像大师》的用户协议(利用規約)的潜在风险。游戏运营商有权对使用此类脚本的账号采取惩罚措施,包括但不限于临时或永久封禁账号。对于因使用本脚本而导致的任何账号损失(如封号、数据回滚等),项目作者概不负责。**
|
|
129
|
-
|
|
130
|
-
> ・对本服务的服务器等进行非法访问、窃取数据、使用使软件进行非法处理的程序、使用工具等获取信息或使用工具等不正当推进游戏的行为。
|
|
131
|
-
|
|
132
|
-
> ・本サービスのサーバー等への不正アクセス行為、データ窃取行為、ソフトウェアに不正な処理を行わせるプログラムを使用する行為、ツール等を使用して情報を取得する行為またはツール等を使用して不正にゲームを有利に進める行為
|
|
133
|
-
|
|
134
|
-
2. **使用限制**:本项目的全部内容**严禁用于任何商业用途或恶意破坏游戏平衡的行为**。任何将本项目用于此类活动的行为,均可能构成对版权方的侵权和对游戏运营商的违约,由此产生的一切法律责任由使用者自行承担。
|
|
135
|
-
|
|
136
|
-
3. **无担保与责任限制**:本项目按“原样”提供,不附带任何形式的明示或暗示担保,包括其功能的稳定性、准确性或持续可用性。对于因使用或无法使用本项目而导致的任何直接、间接、偶然、特殊或继发性损害(**包括但不限于账号封禁**),项目作者概不负责。
|
|
137
|
-
|
|
138
|
-
**继续下载、安装或使用本项目,即表示您已完全阅读、理解并同意承担以上所有风险和条款。如果您不同意,请立即停止使用并删除本项目的所有相关文件。**
|
|
139
|
-
|
|
140
112
|
## 开发
|
|
141
|
-
|
|
113
|
+
环境配置见 [DEVELOPMENT.md](./docs/DEVELOPMENT.md)。
|
|
114
|
+
|
|
115
|
+
开发指南见 [QUICK_START.md](./docs/GUIDE.md)。
|
|
142
116
|
|
|
143
117
|
## 贡献
|
|
144
|
-
|
|
118
|
+
欢迎 PR。
|
|
145
119
|
|
|
146
120
|
你可以从 Github Issue 中选择一个 Issue 解决,或者从下面的路线图里选一个任务讨论。
|
|
147
121
|
|
|
@@ -150,32 +124,39 @@ kaa 的开发还参考了以下开源项目:
|
|
|
150
124
|
(带删除线标记的为已完成)
|
|
151
125
|
|
|
152
126
|
### 培育
|
|
153
|
-
*
|
|
154
|
-
* ~~允许指定行动优先级~~
|
|
155
|
-
*
|
|
156
|
-
* ~~支持非凡(アノマリー)属性偶像的自动培育~~
|
|
157
|
-
* ~~支持琴音的自动培育~~
|
|
127
|
+
* 基本功能
|
|
128
|
+
* ~~允许指定行动优先级~~
|
|
129
|
+
* 考试时使用 P 饮料
|
|
130
|
+
* ~~支持非凡(アノマリー)属性偶像的自动培育~~
|
|
131
|
+
* ~~支持琴音的自动培育~~
|
|
132
|
+
* 模式适配
|
|
133
|
+
* ~~支持 MASTER 培育~~
|
|
134
|
+
* NIA 培育
|
|
158
135
|
* 允许优先选择活动加成高的偶像进行培育
|
|
159
|
-
*
|
|
160
|
-
*
|
|
136
|
+
* 爬塔(偶像之路)
|
|
137
|
+
* 智能化培育逻辑
|
|
138
|
+
* 允许自定义领取 P 饮料、P 物品、技能卡的领取
|
|
139
|
+
* 复刻一个培育模拟器
|
|
140
|
+
* 训练并使用 AI 接管培育流程
|
|
161
141
|
|
|
162
142
|
### 日常
|
|
163
143
|
* ~~竞赛按分数差距优先选择~~
|
|
164
144
|
* ~~自动硬币扭蛋(コインガシャ)~~
|
|
145
|
+
* 活动
|
|
146
|
+
* 活动商店购买
|
|
147
|
+
* 活动扭蛋
|
|
165
148
|
|
|
166
149
|
### 调度
|
|
167
150
|
* ~~模拟器启停~~
|
|
168
151
|
* 记录任务执行时间与次数,避免重复执行。例如竞赛每天只执行一次
|
|
169
152
|
* 常驻运行与自动运行
|
|
170
153
|
* ~~命令行接口~~
|
|
171
|
-
* 尝试接入 ALAS
|
|
172
154
|
|
|
173
155
|
### UI
|
|
174
156
|
* UI
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
*
|
|
178
|
-
* 使用 C# 替换当前的简易 .bat 文件
|
|
157
|
+
* 使用 Web 技术重写 UI,替换现在的 Gradio 实现
|
|
158
|
+
* 分离脚本与 UI,允许 UI 与脚本分别独立运行
|
|
159
|
+
* ~~启动器~~
|
|
179
160
|
|
|
180
161
|
### 跨平台
|
|
181
162
|
* Android 支持
|
|
@@ -186,12 +167,33 @@ kaa 的开发还参考了以下开源项目:
|
|
|
186
167
|
- [ ] 使用 Pyjnius 绕过 ADB ,调用无障碍直接控制设备
|
|
187
168
|
* Linux 支持
|
|
188
169
|
|
|
189
|
-
###
|
|
190
|
-
*
|
|
191
|
-
*
|
|
170
|
+
### 开发工具与框架
|
|
171
|
+
* 分离框架为一个单独的项目
|
|
172
|
+
* 分离资源管理为一个单独的项目
|
|
173
|
+
* 重构资源编辑器(ImageAnnotation 工具)
|
|
174
|
+
* 重构 Devtool 工具
|
|
175
|
+
* 将开发工具通过 VSCode 扩展与 VSCode 整合
|
|
192
176
|
|
|
193
177
|
### 其他
|
|
194
178
|
* 适配汉化版
|
|
195
179
|
- [ ] 需要一个合适的方法自动切换不用语言的资源文件
|
|
196
180
|
- [ ] 需要一个合适的工具来辅助替换模板图片文件
|
|
197
181
|
- [ ] 收集汉化版本的截图
|
|
182
|
+
* 挂机优化
|
|
183
|
+
* 夜间挂机:完成后自动休眠/关机、自动降低屏幕亮度、自动静音
|
|
184
|
+
* ~~闲置挂机~~
|
|
185
|
+
* 资源记录
|
|
186
|
+
* 记录并保存历史钻石与金币数据
|
|
187
|
+
* 展示变化曲线图
|
|
188
|
+
|
|
189
|
+
## 开源协议
|
|
190
|
+
kaa 本体及框架(kotonebot 文件夹)、相关辅助脚本(tools 文件夹)使用 **GPLv3 协议**开源。kaa 开发工具(kotonebot-devtool)、启动器(bootstrap 文件夹)以 **MIT 协议**开源。
|
|
191
|
+
|
|
192
|
+
kaa 的开发主要用到了以下开源项目:
|
|
193
|
+
* [GkmasObjectManager
|
|
194
|
+
](https://github.com/AllenHeartcore/GkmasObjectManager):用于提取游戏图像资源,以 GPLv3 协议开源。
|
|
195
|
+
* [gakumasu-diff](https://github.com/vertesan/gakumasu-diff):游戏数据。
|
|
196
|
+
|
|
197
|
+
kaa 的开发还参考了以下开源项目:
|
|
198
|
+
* [EmulatorExtras](https://github.com/MaaXYZ/EmulatorExtras):MuMu 与雷电模拟器的截图与控制接口定义。
|
|
199
|
+
* [blue_archive_auto_script](https://github.com/pur1fying/blue_archive_auto_script):MuMu 与雷电模拟器的截图与控制接口的 Python 实现,以及各模拟器的控制实现。
|