ksaa 2025.11b1__py3-none-any.whl → 2025.11b3__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.
- kaa/application/core/feedback_service.py +121 -0
- kaa/application/core/misc_core.py +4 -1
- kaa/application/core/update_service.py +208 -0
- kaa/config/schema.py +6 -0
- kaa/errors.py +60 -0
- kaa/main/gr.py +106 -516
- kaa/main/kaa.py +11 -3
- kaa/metadata.py +10 -0
- kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
- kaa/resources/game.db +0 -0
- kaa/resources/game_ver.txt +0 -0
- kaa/resources/idol_cards/i_card-skin-amao-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-amao-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-1-000_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-1-000_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-2-000_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-2-000_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-3-000_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-3-000_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-fktn-3-016_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-fktn-3-016_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-003_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-003_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-009_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-009_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-013_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-013_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hrnm-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hrnm-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hski-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hski-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hume-3-009_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hume-3-009_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hume-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hume-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-jsna-3-009_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-jsna-3-009_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-jsna-3-014_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-jsna-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kcna-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kcna-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kcna-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kllj-3-014_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kllj-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-shro-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-shro-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-ssmk-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-ssmk-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-ttmr-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-ttmr-3-015_1.png +0 -0
- kaa/sprites/19513e9f-2cbb-4f66-84b7-2ad2faed252d.png +0 -0
- kaa/sprites/1ef5fa52-b6e1-42d0-947a-ce970eba057d.png +0 -0
- kaa/sprites/318abb8a-5950-4d22-ac42-77219b5bc1a0.png +0 -0
- kaa/sprites/321b7040-87d7-4f87-9b44-ad2972584a11.png +0 -0
- kaa/sprites/3ae72684-1d40-43cf-9508-511c010de64f.png +0 -0
- kaa/sprites/3e669188-5933-4502-b039-38f4d4649664.png +0 -0
- kaa/sprites/4370013d-f052-4314-94ff-a342d70754c3.png +0 -0
- kaa/sprites/4fb1d36c-5fb6-4fe5-9ba3-07e056eb1dfc.png +0 -0
- kaa/sprites/5247b052-5b45-4e64-b7fc-d566f5d4bc82.png +0 -0
- kaa/sprites/545a9032-a676-4d9d-ac74-2b2c9b330d1a.png +0 -0
- kaa/sprites/57741798-65dd-47eb-b4b1-b3f0e3c3e318.png +0 -0
- kaa/sprites/5e2b4bb9-f200-4723-96ac-5f907e28eaaa.png +0 -0
- kaa/sprites/5f6fafd9-43aa-443e-994e-f2688af5e238.png +0 -0
- kaa/sprites/61229c71-303b-4dc9-ba4e-6a14e5ab161e.png +0 -0
- kaa/sprites/62f93327-5946-4a48-aff8-a203483b0562.png +0 -0
- kaa/sprites/64dfeb35-61ad-4e9b-9847-a18530f02584.png +0 -0
- kaa/sprites/64f8ef99-4766-471b-aeb0-b109704d9615.png +0 -0
- kaa/sprites/677933e9-1481-4f01-95b4-d55bea51db8c.png +0 -0
- kaa/sprites/67edcd91-d2c1-418b-987a-e60263626f56.png +0 -0
- kaa/sprites/6c032aa7-20e3-4e2e-b1a4-1585141ba22b.png +0 -0
- kaa/sprites/6fadb00b-e32e-4c45-a738-f21b8f48c139.png +0 -0
- kaa/sprites/719297ec-82be-4820-8ecf-8bf6322b81fe.png +0 -0
- kaa/sprites/76970b91-7864-4413-bfc7-79c04a48dce7.png +0 -0
- kaa/sprites/7c62081d-097a-4514-a69d-69e96201e816.png +0 -0
- kaa/sprites/7e16af89-bb51-4889-8a7e-25715ff5faa1.png +0 -0
- kaa/sprites/7efce7bc-12a5-4a53-9a0a-9fa755649ebd.png +0 -0
- kaa/sprites/803fb770-6982-4460-8fe0-f9ccd67367c2.png +0 -0
- kaa/sprites/82200c8c-0916-4601-839a-945f96cc4ebc.png +0 -0
- kaa/sprites/8299e3e2-cfd5-4380-adce-a46c93b1be4d.png +0 -0
- kaa/sprites/83c27159-36d2-4ccf-ace7-e5d2169e7e52.png +0 -0
- kaa/sprites/8661bc83-9b0a-4555-8b21-2258b31c7f57.png +0 -0
- kaa/sprites/89437aca-7339-4795-b848-ec529b1e5e8d.png +0 -0
- kaa/sprites/8a0260f5-b32e-430e-bc98-7b5a77cab6ab.png +0 -0
- kaa/sprites/8c3bc157-022a-4bb1-be74-af1ad254e67f.png +0 -0
- kaa/sprites/8d09178a-251e-4f74-b023-12233417621b.png +0 -0
- kaa/sprites/8fbee6fe-9409-407e-8f55-d2d36ab37f6a.png +0 -0
- kaa/sprites/8fdc102b-d8f3-4d16-b8ef-1d804f5aff07.png +0 -0
- kaa/sprites/93e91dd0-0050-48b4-8bf8-c732cd76f0e3.png +0 -0
- kaa/sprites/993a33ac-994b-4eb0-9c1e-b9412d499d67.png +0 -0
- kaa/sprites/99a27ff1-bc1c-48a2-9f9b-0803338d1bd8.png +0 -0
- kaa/sprites/9a9a1f40-d308-4aa5-8d91-60342bc6a4e0.png +0 -0
- kaa/sprites/9f573ac2-9d28-4d92-8e3f-1b78031220dd.png +0 -0
- kaa/sprites/__pycache__/__init__.cpython-310.pyc +0 -0
- kaa/sprites/a2545c5c-b5cc-4fd2-93c1-04c74c17ee16.png +0 -0
- kaa/sprites/a2dd125b-9868-4e01-9a46-3b552c2ebdc9.png +0 -0
- kaa/sprites/a7f25aeb-d91b-47e0-ba1a-0c6382380102.png +0 -0
- kaa/sprites/a888e87e-49fe-405d-b074-3dda30304808.png +0 -0
- kaa/sprites/a9ba2741-38da-4448-ab80-f0e5b3c3847f.png +0 -0
- kaa/sprites/a9c5aeb0-c0c9-47da-8793-ffe8d172bea0.png +0 -0
- kaa/sprites/aba47934-f264-49f9-a72c-6ed90b112701.png +0 -0
- kaa/sprites/abe2757f-84f3-4967-bd05-79c17cb1f32c.png +0 -0
- kaa/sprites/acd741da-d4ab-4b76-a6a3-4a2fd25870ef.png +0 -0
- kaa/sprites/ad17ae00-f6ce-4f32-9386-9a8073b5e79a.png +0 -0
- kaa/sprites/ae73d26b-2d47-4921-a6ec-5bbea32773a3.png +0 -0
- kaa/sprites/b10281ae-cfaf-4400-b2fb-c8c2b432c8e7.png +0 -0
- kaa/sprites/b40bebbf-2800-40fb-b7a2-1c2d5995e747.png +0 -0
- kaa/sprites/b76add75-2187-428c-9ede-fb43086bacb6.png +0 -0
- kaa/sprites/b77a7e97-dc59-493d-9d76-4ea9c2876978.png +0 -0
- kaa/sprites/b9770cd2-b55f-44dc-965f-f29686fba7da.png +0 -0
- kaa/sprites/ba8ee2cd-f662-440c-90b3-1e4bfe7bab6b.png +0 -0
- kaa/sprites/bb3990c8-4618-4d96-9365-a4d1213b59f7.png +0 -0
- kaa/sprites/bbe59f62-c3e7-404c-a313-b50db70de7b5.png +0 -0
- kaa/sprites/bdb1460e-c5db-494a-a58a-688f72b6bdba.png +0 -0
- kaa/sprites/bdb72f31-5808-4451-827f-fffc3b616083.png +0 -0
- kaa/sprites/bf3ff37e-d4fc-42ee-87d6-db1e2040aed5.png +0 -0
- kaa/sprites/bff753bb-b02e-441b-89e5-14845f18c6f6.png +0 -0
- kaa/sprites/c035ac76-39e9-466b-a606-28bc52bc73e8.png +0 -0
- kaa/sprites/c05a600a-d79e-432d-a49f-5b2443d67bd4.png +0 -0
- kaa/sprites/c0801be3-f07a-4afc-ab0d-7f5d3c4afbd3.png +0 -0
- kaa/sprites/c2100faf-1234-49db-b6d4-5a08a4b08272.png +0 -0
- kaa/sprites/c6b0f9ba-a976-474b-b22d-6fe4391d9373.png +0 -0
- kaa/sprites/c78fb143-18e3-4697-a0c1-6151514f2a7c.png +0 -0
- kaa/sprites/c8c17304-e949-4dfc-b07d-9e7133483e31.png +0 -0
- kaa/sprites/c91874f4-363f-4997-a38e-3e486dfd8043.png +0 -0
- kaa/sprites/c9245201-4d29-4088-a5e0-f4e93d4494b5.png +0 -0
- kaa/sprites/cb0bbf0f-a25b-4ec4-99bd-f5742270a062.png +0 -0
- kaa/sprites/ccfab3e2-7b6d-4ae3-998b-4e5c1863884a.png +0 -0
- kaa/sprites/cdf310f0-b917-4f92-95a9-893af76e3c3a.png +0 -0
- kaa/sprites/cea8f98d-ba68-498f-bd3d-cc10f0d4575b.png +0 -0
- kaa/sprites/cec36685-85a7-4e84-bbbc-4df70b4f7bac.png +0 -0
- kaa/sprites/cf49878d-a1c5-4b9f-9502-1e0d9eaadc49.png +0 -0
- kaa/sprites/d23a600a-7002-4268-96a4-18dc54928ec6.png +0 -0
- kaa/sprites/d57f792a-f086-4fbe-b4d9-5db629a78d42.png +0 -0
- kaa/sprites/d6dd92b3-310f-4f5d-a8ef-b941c3659c0c.png +0 -0
- kaa/sprites/d8967770-c64a-4609-a0a5-f46ba81edceb.png +0 -0
- kaa/sprites/d91483a2-83fa-4664-8eda-52498c0e77bc.png +0 -0
- kaa/sprites/d9a636be-a017-4ef5-a70c-c374827008a0.png +0 -0
- kaa/sprites/dae37bd7-6a34-4eb4-8cd0-3c0c03b4575a.png +0 -0
- kaa/sprites/dc51eccf-9470-495a-9e38-59d4481adbd4.png +0 -0
- kaa/sprites/dcea5aae-322e-4cd4-b218-0eac48690755.png +0 -0
- kaa/sprites/dcf465c6-ad64-48e7-9c3c-7bc7cfc13a44.png +0 -0
- kaa/sprites/ddb59f04-91a0-4fbd-8921-be13acdab291.png +0 -0
- kaa/sprites/de81f919-4d01-4a4e-bdc1-ffe6e23a5c22.png +0 -0
- kaa/sprites/e05f2c16-926f-48be-bdd0-16182e879394.png +0 -0
- kaa/sprites/e2a0c1a6-c0cf-400e-99be-1ed0d35c6ed8.png +0 -0
- kaa/sprites/e30922ed-a02f-4ede-9968-1656be5a05b2.png +0 -0
- kaa/sprites/e388db01-0870-412d-b8bc-5a512ec997c8.png +0 -0
- kaa/sprites/e392856d-ac59-4414-8fb8-df93a1a99be4.png +0 -0
- kaa/sprites/e57db8c2-c050-43fb-8205-339aeb5875e8.png +0 -0
- kaa/sprites/e687c2ba-2c30-4fc8-804f-fea5815f6765.png +0 -0
- kaa/sprites/e6e66204-8a2f-4377-8674-b7d663ff0081.png +0 -0
- kaa/sprites/e79a2a08-3b58-4ab0-8c2b-769f30cc8591.png +0 -0
- kaa/sprites/ebe22aea-0318-49d8-ab07-ce2eef34265f.png +0 -0
- kaa/sprites/ed6df33a-c7aa-4542-a87b-9cc9cae0465c.png +0 -0
- kaa/sprites/ed854df1-878c-4e0b-8138-9b28d314ede6.png +0 -0
- kaa/sprites/ed98a341-5dff-4af7-a194-d28232d481a4.png +0 -0
- kaa/sprites/f0ed1dd3-b227-48c1-8c8c-858dbd84fcc7.png +0 -0
- kaa/sprites/f1eb4089-8cd1-4830-b00e-40535ddcd116.png +0 -0
- kaa/sprites/f237d88e-92ac-4ebf-85e1-80a696b5203a.png +0 -0
- kaa/sprites/f2f818c9-b0cf-436d-9d3e-6544c5399063.png +0 -0
- kaa/sprites/f333118a-81c2-417f-b54f-64dc4e8df613.png +0 -0
- kaa/sprites/f34e8026-bdfc-47e6-a0ed-49e587ef0f40.png +0 -0
- kaa/sprites/f3a5992b-dabf-4c2b-83e9-4c91c3b7aac8.png +0 -0
- kaa/sprites/f4195ceb-586a-4a8c-9424-4962239d2120.png +0 -0
- kaa/sprites/f485db66-2159-4d31-ba53-0fbb726e7f64.png +0 -0
- kaa/sprites/f7264cee-fea6-47b5-9f9b-8f3f31c03ea0.png +0 -0
- kaa/sprites/f7e34403-a53c-4d3f-935b-25b4acb7f7a5.png +0 -0
- kaa/sprites/f8d8c943-1b36-4391-a7fc-2a49f8966d53.png +0 -0
- kaa/sprites/f9157db8-d70b-4d46-9800-5a833ce7eda8.png +0 -0
- kaa/sprites/f9a353b2-958d-4aae-ade4-66bdc6481e35.png +0 -0
- kaa/sprites/fa5b5b92-9c60-4811-a44c-8e897c9632c3.png +0 -0
- kaa/sprites/fac7b90a-1174-477b-803b-28798647c307.png +0 -0
- kaa/sprites/fbbb73f9-880e-4c7f-9ec9-276bdab4b394.png +0 -0
- kaa/sprites/fce4a481-e71c-4dab-aeac-59ff8b18201b.png +0 -0
- kaa/sprites/fd8a7a5d-f021-4bfd-83f7-a2dd33325837.png +0 -0
- kaa/sprites/fda4b3eb-e31a-448b-8cb3-9126e1ab7deb.png +0 -0
- kaa/sprites/fda78372-04b4-4d55-92b1-aedec20d0913.png +0 -0
- kaa/sprites/fe993a91-1a49-488e-b7ff-c1b05b8f2b5f.png +0 -0
- kaa/sprites/ff8efb8f-e1a4-4202-a6e1-680eb44f58da.png +0 -0
- kaa/tasks/R.py +128 -128
- kaa/tasks/common.py +5 -0
- kaa/tasks/daily/contest.py +2 -1
- kaa/tasks/produce/cards.py +5 -4
- kaa/tasks/produce/common.py +201 -105
- kaa/tasks/produce/in_purodyuusu.py +14 -10
- kaa/tasks/produce/non_lesson_actions.py +10 -33
- kaa/tasks/produce/p_drink.py +5 -1
- kaa/tasks/produce/produce.py +2 -1
- kaa/tasks/start_game.py +2 -1
- {ksaa-2025.11b1.dist-info → ksaa-2025.11b3.dist-info}/METADATA +9 -6
- {ksaa-2025.11b1.dist-info → ksaa-2025.11b3.dist-info}/RECORD +323 -177
- /kaa/sprites/{fdf0da06-f088-424f-9941-8c883fea3db3.png → 03d0acec-15fd-4c21-82ce-122764def185.png} +0 -0
- /kaa/sprites/{68d9f340-a3d2-4708-8eb1-c1ed857decda.png → 03d22cb3-0193-4dcb-8a0d-98b7ca9c2b4c.png} +0 -0
- /kaa/sprites/{dce410ee-fa56-41c4-b75e-e1bff79cd94f.png → 0455e229-75c9-44ba-8729-745799746979.png} +0 -0
- /kaa/sprites/{ad94041c-f30b-40b9-b11a-1a26e9962274.png → 049ecbf6-d434-46fa-a42c-a447475269bb.png} +0 -0
- /kaa/sprites/{f6b042a8-a91e-4811-99f9-18bbb5197468.png → 04ea8503-cdd5-4b3e-a33b-63893b92f6ba.png} +0 -0
- /kaa/sprites/{847226a3-b7d2-4156-b732-9215a3e14f3a.png → 05251a85-2883-4098-842e-6544391de919.png} +0 -0
- /kaa/sprites/{9008fbb2-f23f-424f-9be7-5bae6a3697ab.png → 054db45e-1434-4604-91ec-7ac586ca11b5.png} +0 -0
- /kaa/sprites/{ae1e70bc-f735-4749-8c23-95735b91897a.png → 06cf74aa-635f-48ab-b965-36981f2063d3.png} +0 -0
- /kaa/sprites/{3b4f90c9-6de7-4ac3-8e41-5f8757bf3f3e.png → 0814c0fd-6f89-47d3-8089-e8cfde569750.png} +0 -0
- /kaa/sprites/{2cec1d6a-9e8c-49b3-b885-0b0d7c4b95ee.png → 08bde3ff-7554-4bdb-a7f0-193323489d5b.png} +0 -0
- /kaa/sprites/{91b30f5e-31b2-4756-a3f7-f0f82a335442.png → 09222fb0-78a6-4663-8c1f-1d44e881513d.png} +0 -0
- /kaa/sprites/{5431dc38-c257-40b3-8f7b-8bceaa7fe587.png → 0b436edb-8f6a-429d-87b7-5d4250f651ac.png} +0 -0
- /kaa/sprites/{338d7e71-98ce-4cd1-9954-bf7155150780.png → 0c266b0e-de7a-49c1-9709-b01fb5086f75.png} +0 -0
- /kaa/sprites/{8e019262-ad23-4cbb-84da-86b34775a91e.png → 0db579bf-d555-4468-8104-c2d2e68d33b1.png} +0 -0
- /kaa/sprites/{8be81341-a74d-42c8-8231-5d1854bc08e7.png → 114730f6-eddd-4381-b723-aee18cde0d90.png} +0 -0
- /kaa/sprites/{31f2de0a-567b-425a-9be6-536e4532d813.png → 11870372-dc78-4a80-8320-15bb24da6f25.png} +0 -0
- /kaa/sprites/{3fa5f81c-9223-44ba-bf07-71932350e845.png → 11bc7d35-e58d-4301-a0b0-f557dbd73c7b.png} +0 -0
- /kaa/sprites/{92c3de1b-eed1-45b9-82e0-c9e97bb479e7.png → 12455dbd-7d70-4435-a3ba-f40654e75c37.png} +0 -0
- /kaa/sprites/{aa1624ff-88b0-447b-8e2b-8a50fd9e4062.png → 12f330a6-4eab-4015-b0e3-4e1a35a7b676.png} +0 -0
- /kaa/sprites/{9991b19c-7330-42c4-9d7d-db3cb00103b7.png → 14a697d4-0b58-4644-bb2d-8823d2fefcb8.png} +0 -0
- /kaa/sprites/{49bde219-f9a3-41b5-84b8-e417160a0f40.png → 15605f7a-2206-436c-8a71-011d9f95cf4e.png} +0 -0
- /kaa/sprites/{ea430652-e263-4a15-bb6f-8a8807be6c8f.png → 15dd89cc-53ed-4c77-a355-62e3bd7a15dd.png} +0 -0
- /kaa/sprites/{5c310fe5-7e92-4167-9eba-6e8e14a2863a.png → 18b13508-c46f-4134-b991-975c0a1b9a74.png} +0 -0
- /kaa/sprites/{cd00a2d7-af48-48b1-b2e1-5360ceed249f.png → 1a5c147b-e28e-42ad-893a-7430d8f4fc35.png} +0 -0
- /kaa/sprites/{94d54ba7-0ccf-4fd9-a5bf-488bac1364c8.png → 1b3c84c5-16d1-43a7-8513-719bd7a10450.png} +0 -0
- /kaa/sprites/{2289d38f-dc98-4310-9f34-4cf5023f8545.png → 1b847790-90e2-44f8-b6d9-4814812006bd.png} +0 -0
- /kaa/sprites/{6c926e92-9af9-402d-8512-6417ca116928.png → 1e57ab88-9962-4024-81df-746529a758f9.png} +0 -0
- /kaa/sprites/{30e12bf1-8fa5-4de1-8d7b-28fa0fec0cb6.png → 205e03de-46d9-4983-a2ea-a7f7500d508f.png} +0 -0
- /kaa/sprites/{e4dc3b35-195c-415f-9484-c2459bd8675a.png → 20bd834e-c99c-4e80-92db-0740e5bbe746.png} +0 -0
- /kaa/sprites/{68e20ebf-02fd-46a1-88d7-b4472824e7bc.png → 218a6ab3-93f6-4bb1-9848-8c97ff695945.png} +0 -0
- /kaa/sprites/{ec3cad5f-e0c9-4577-8499-79b50248344e.png → 22071c63-a1bc-4163-8d5a-973b3d579c76.png} +0 -0
- /kaa/sprites/{e933cd55-e47a-4327-89d7-b25995cb4a3f.png → 2460d0c9-50e2-451b-b609-ad466b574395.png} +0 -0
- /kaa/sprites/{0af1d573-1dc7-427e-997d-173308ea3649.png → 264d021a-b322-4472-8a7b-5f1322aba993.png} +0 -0
- /kaa/sprites/{57c81080-7b53-4286-8fa5-848ad63e4774.png → 28335ba3-9a0f-46cd-b66d-047781773264.png} +0 -0
- /kaa/sprites/{d7750f81-de10-4d6f-9cc7-35223bda9d70.png → 28df544b-72f2-4ed8-8bf3-609ff99633d9.png} +0 -0
- /kaa/sprites/{81686816-c723-47d1-9824-a68d9ebe1bd4.png → 2a82e2d6-0722-433a-87fa-f1752ce0b9b7.png} +0 -0
- /kaa/sprites/{5ffd3f29-db4f-4f66-b9ed-be5a70b7ebf9.png → 2abce6a4-111f-42bb-9255-f98d544108de.png} +0 -0
- /kaa/sprites/{23b9cda9-8be8-438e-8e54-57d91a4bd875.png → 2d8e6464-aceb-41fd-9e78-7523738d5720.png} +0 -0
- /kaa/sprites/{1ad89ee4-1bb1-41d2-a92c-79caf6baa38a.png → 2f9e2dbb-66a1-4b13-9b9e-d62e10efa6d3.png} +0 -0
- /kaa/sprites/{c69dcdcf-42a7-420e-aa8e-bb8639ea80b6.png → 307b58f0-20c1-41bd-9eaa-1337fd0e6563.png} +0 -0
- /kaa/sprites/{55c3af20-58dc-4407-a383-312a57417c39.png → 3192a62f-224d-44b1-a0b9-b1fc22de8ec1.png} +0 -0
- /kaa/sprites/{645909d7-b960-46c7-b208-db44b6b7feec.png → 31b4c370-696f-4dfc-a918-839495520266.png} +0 -0
- /kaa/sprites/{7daaca55-e3fd-4e12-bf31-872105ceb726.png → 330c2207-af32-453b-8db7-889cda83e7cc.png} +0 -0
- /kaa/sprites/{5734e48a-1e58-42de-be7b-b7db67db4a01.png → 38186efc-850c-4d83-97bc-9417f1494b94.png} +0 -0
- /kaa/sprites/{8ed51be4-815c-4a3d-805e-030fdfa341e2.png → 38426696-ff13-4f20-9f74-b05855990153.png} +0 -0
- /kaa/sprites/{cfe3563d-a24b-4197-a0cb-5628bd990c08.png → 3a211792-1243-496a-b41e-0e3fd121cd5b.png} +0 -0
- /kaa/sprites/{179c0fff-ebd2-4a16-8db2-297552cca218.png → 3a4e2d8a-deca-4980-b6c2-37bfc17d2720.png} +0 -0
- /kaa/sprites/{2d0e9d49-365a-4bcb-a416-38b87defaa3c.png → 3a4ec054-2c48-4359-afb9-fa5ea8191d16.png} +0 -0
- /kaa/sprites/{51b95c81-4ff9-434c-ade2-3518e63337cb.png → 3c490171-6810-44f0-b28d-c6b664347a3c.png} +0 -0
- /kaa/sprites/{35341839-4469-4ab6-aa40-33642fe43e82.png → 3cda578a-fa75-4bbd-9cff-be4bc4355a58.png} +0 -0
- /kaa/sprites/{72634cb3-4c76-4ca2-8898-ebb837ec19e3.png → 3ea03db7-4de9-45c4-a07b-a9bbc2c63e70.png} +0 -0
- /kaa/sprites/{da48db0d-09d9-47c3-9e08-8b69ad547be6.png → 3ea8e354-2684-46f3-9f5a-43f094717c95.png} +0 -0
- /kaa/sprites/{3e087b8d-420d-48ff-b526-29c4a65d8cbe.png → 3eb9b21b-abbe-49fd-a3a9-6e1c1a6e91d9.png} +0 -0
- /kaa/sprites/{2234f709-1703-4589-905c-175f4db09b1b.png → 3fb84a71-ed15-4989-9598-34e7342f38f5.png} +0 -0
- /kaa/sprites/{39f6d657-3b3e-40aa-849b-7ad87a0be1d0.png → 3ffd2992-fa55-499c-8c3b-193518ebbe07.png} +0 -0
- /kaa/sprites/{464b1dd8-ca2e-41e9-a5b5-90545c584db7.png → 41ff9641-d200-4caa-bcfa-d8389a3438eb.png} +0 -0
- /kaa/sprites/{70768479-5d7a-4941-8774-ad556c47bee2.png → 455dcf19-63f5-4b0a-99e6-b23d3876d199.png} +0 -0
- /kaa/sprites/{694879e8-ecca-45e2-8ea4-1b447fd43ace.png → 45f09e08-53ea-4e08-97dc-70f689bab002.png} +0 -0
- /kaa/sprites/{dd873ac0-ffba-4335-9cf2-2162c6835ed8.png → 4729b509-0f4a-4e96-b186-ec56c680c9e6.png} +0 -0
- /kaa/sprites/{7d7df15f-707e-4e27-826f-21e42af1dae0.png → 4eb665ef-7741-40f9-8174-7b6ca66d045b.png} +0 -0
- /kaa/sprites/{8e5e968b-edad-4c03-abc8-3f2a7e8879ae.png → 4f370ff6-61d1-405a-b29e-e6d0b3072194.png} +0 -0
- /kaa/sprites/{f0462447-5226-4819-a39b-19ab90583f83.png → 504e4927-bfeb-43ee-aa5c-35cec664a4c8.png} +0 -0
- /kaa/sprites/{756f4ca7-acac-48e1-8bcd-1c5cd8937e3a.png → 51eb4be2-22fa-4683-82c7-513f5934f7b9.png} +0 -0
- /kaa/sprites/{87f3c1ae-5117-4871-a7d6-3f5ff0c9f9fb.png → 568608bd-a1fa-4faf-ae15-179563a7e84f.png} +0 -0
- /kaa/sprites/{978873bb-e4d0-451b-9126-6977144f5395.png → 56ac84af-4c85-4b69-b449-98981c1df292.png} +0 -0
- /kaa/sprites/{db6707a2-2964-4919-9992-4d801fa43dae.png → 5a49b6d2-2bcb-49bc-a28f-b8bd1441f60a.png} +0 -0
- /kaa/sprites/{01256311-237c-476f-96ce-4136dc4bfbd3.png → 5a677634-99cf-45b5-bc0c-94120872a518.png} +0 -0
- /kaa/sprites/{8e4d8a0f-4a9d-4562-9234-63806b11d85f.png → 5ec51718-1403-4a79-bd85-46e1fe04d8c9.png} +0 -0
- /kaa/sprites/{dc97fea3-898f-4135-9c40-ad41570ab4ae.png → 5f2d0b2b-8425-4dd8-8b85-d62f4b75286c.png} +0 -0
- /kaa/sprites/{f32a41a2-c482-41ba-b718-28f048f5148c.png → 5f4abae0-a1f0-4c8c-9d93-a8525caa9dd0.png} +0 -0
- /kaa/sprites/{31e3ac2b-ecd4-4c37-88bc-985ef32e73a3.png → 6005bf30-fd7c-401e-8efd-050fa97ad7f3.png} +0 -0
- /kaa/sprites/{3b4dc708-1d34-4a88-9fe3-d8de2ec1d5c8.png → 6069f8bc-2a06-45a4-95ca-1ac9d8fa3b04.png} +0 -0
- /kaa/sprites/{962aa0b9-1dd3-4260-a4fb-c069c26e5a84.png → 60896822-de58-4e07-b2d9-86a7f4068de1.png} +0 -0
- /kaa/sprites/{889a4153-b713-49cb-a4d5-e302bcdd002d.png → 622d700e-0fd8-4a92-a286-1e8143c70570.png} +0 -0
- /kaa/sprites/{b59c0e9b-1f20-4194-ab37-286f505fa656.png → 63b74752-73ce-4020-a7c8-0a71a9f67415.png} +0 -0
- /kaa/sprites/{4a081370-b0a1-4067-8470-e3007cc68a12.png → 648d43f6-b251-4d6f-a808-ae7325c91a59.png} +0 -0
- /kaa/sprites/{bfdc9b53-2fe5-43f1-8588-7ab71217d31c.png → 65f79941-1c78-496a-a67c-c50f4227bd34.png} +0 -0
- /kaa/sprites/{9e7eaa8e-3178-44da-a5ec-34b889f8facf.png → 6f50cd3b-6e46-46c5-99ed-26728d3212ad.png} +0 -0
- /kaa/sprites/{ab237c6d-c4d8-4716-8ef7-99b8e995c9a7.png → 6f6d7af3-8380-439b-9d26-3fbd5a103b49.png} +0 -0
- /kaa/sprites/{1befe09b-cb77-417a-b21e-7746804d4e03.png → 71913fde-c3db-463d-800d-e1b35fa2c8b4.png} +0 -0
- /kaa/sprites/{e7f2734f-9fdc-4521-8d7e-8b0fe270a223.png → 71976c1a-5df9-44a5-b4ea-08b5d617d813.png} +0 -0
- /kaa/sprites/{9f7150bc-c0b8-48d6-862c-456aaf518b2b.png → 72a8bcd2-3f32-4ee5-8295-eedf441d6a1a.png} +0 -0
- /kaa/sprites/{cd0e8663-2ea1-436a-b9fb-3caa0c3ed9e8.png → 73b6f3aa-5179-41d6-a82e-22e14aa8cd6a.png} +0 -0
- /kaa/sprites/{cba0646d-dffe-4c5b-a44d-1f8d827624a6.png → 7a74b5f5-7a04-4678-8e6e-57b5de127182.png} +0 -0
- /kaa/sprites/{5930140e-effe-4bcf-b0be-c20d3990d833.png → 7b4c3a81-8f09-4a00-90ee-d4df3f57e863.png} +0 -0
- /kaa/sprites/{cb6dffd9-6474-4d09-aee6-26352ea51d31.png → 7c4ca388-5167-478a-a32b-0e108edad888.png} +0 -0
- /kaa/sprites/{96704aa3-b5ad-4e34-bb88-fad766415362.png → 7d4709f8-6d0d-493f-819e-74cb0f7c166b.png} +0 -0
- /kaa/sprites/{fcc72120-2a77-4c26-a27e-e1027c6088c0.png → 7e8904fd-5863-471f-8e9a-d69d9ca72f8f.png} +0 -0
- /kaa/sprites/{023b8f4c-15ab-4845-b141-446c861ad475.png → 80800c2e-417d-4118-b726-93aaabfc08bd.png} +0 -0
- /kaa/sprites/{f0aef696-2106-46a4-8b7f-9f16b6c89d3f.png → 81b1b160-2d0f-42ad-924a-9572a54f343a.png} +0 -0
- /kaa/sprites/{13cb0309-b713-4725-b10b-26afe46eb9c0.png → 82259f79-2bef-442b-bf16-78cb4f22e3be.png} +0 -0
- /kaa/sprites/{43a367e1-91dd-495e-8c30-41903f75a99a.png → 861a4faa-2522-41e9-8e20-7bd9180bea5a.png} +0 -0
- /kaa/sprites/{01247ebe-8d63-4573-90f4-d8dc2b7ca14c.png → 87ed135a-2eb1-4e21-8928-d0307a22ea66.png} +0 -0
- /kaa/sprites/{1cf03f98-63e9-467c-804d-c74dd97b69bd.png → 8805fead-f7e2-4905-a42e-05ebba2fbe21.png} +0 -0
- /kaa/sprites/{16a0fd47-e85b-4848-8894-9d071ea993ac.png → 88be2dcc-68ca-4596-9b2c-544a196cab64.png} +0 -0
- /kaa/sprites/{a5694c76-3c5d-462e-81d5-1e0e6cef0ec9.png → 89841ff0-e834-4a7e-b9d5-00a9490b6b7f.png} +0 -0
- /kaa/sprites/{84cabff2-7a1b-4018-b74b-46f4db06304f.png → 8bf08bab-7c55-45e1-8433-c2213a323480.png} +0 -0
- /kaa/sprites/{e5e49b44-dcc2-4e77-9180-0d2beaa3f9ad.png → 8d416e23-04ef-47bd-8cc8-7f18d1bab736.png} +0 -0
- /kaa/sprites/{c1d502eb-c77f-45cb-86b5-11b4a8a3aef5.png → 8f9dd0f0-f9af-4eec-a89e-8f2c92f88a98.png} +0 -0
- /kaa/sprites/{424a0ef5-102d-4734-a731-2b3b3c7c9682.png → 9088f8c0-59f8-41c6-994c-ae283ac94c24.png} +0 -0
- /kaa/sprites/{91a50322-52d9-4516-9e46-bc121f20667d.png → 922af7d1-75e9-4ac8-a4e7-2dad8bb1ca87.png} +0 -0
- /kaa/sprites/{d81b1325-e57a-4f22-93e1-6ad4baa28935.png → 94ed55fe-3ef8-46bc-855a-a7b1dedab801.png} +0 -0
- /kaa/sprites/{913dbd4e-ebb1-4c9f-b145-9960cde59c17.png → 95d715c3-d569-48b5-be7b-c21cd2a160db.png} +0 -0
- /kaa/sprites/{dd7bd6cd-90f1-4773-9b68-5df7f2f84da5.png → 97a3791d-fa9d-453d-8081-c574fe88b823.png} +0 -0
- /kaa/sprites/{2204967a-a0ee-4dd3-aecb-4d531e8e954c.png → 9acd9a59-004f-4e1d-a208-0c293f2702d5.png} +0 -0
- /kaa/sprites/{572a921d-633f-4465-b177-7a0d9ad7e099.png → 9f3bfe36-8462-404f-94da-9bc324b1beed.png} +0 -0
- /kaa/sprites/{799fe395-2264-4bc5-b515-813dadda8fe1.png → 9f46f543-d7dc-4836-a210-125d686475f9.png} +0 -0
- /kaa/sprites/{5bf2a814-df85-4d0a-b4b5-8883ac2ee434.png → a34502b4-10bd-42ca-9ada-a9cdb57097dc.png} +0 -0
- /kaa/sprites/{043e753e-db15-45ba-8513-53c3fc9c7f3c.png → a3fe5859-62ba-403e-9367-65db0ad15943.png} +0 -0
- /kaa/sprites/{8f7b55d8-0143-4d27-bef8-560d4d510500.png → a42ac612-acbd-45cc-88fb-104ff9b7d2d8.png} +0 -0
- /kaa/sprites/{736a9daf-05d6-46ba-810b-5a8f509152d1.png → a4c6d967-0251-4b33-acb3-81d24f82d5a4.png} +0 -0
- /kaa/sprites/{edcec31d-d5de-4f22-b666-3e3c656e06d8.png → a6ed21f0-4da4-4065-bb59-062a70e132ca.png} +0 -0
- /kaa/sprites/{e9310e38-a418-4561-bf33-eb3e6dccf477.png → a97e2840-1575-4f2c-97df-6a720c644969.png} +0 -0
- /kaa/sprites/{d644faa3-ff16-417f-928c-4c62b040bfdb.png → ae0ce964-eb8f-45a1-aa4d-f47a5c8c720f.png} +0 -0
- /kaa/sprites/{256ffeba-8e9e-4cc5-8a1c-9eaee427f1a5.png → ae106b38-da4f-4b0d-b9c3-541fd58f4de7.png} +0 -0
- /kaa/sprites/{802db04f-77c2-46a4-a6eb-f81d48ea03ce.png → aeab8f9a-fe61-4c2d-a494-ffc19a9cae91.png} +0 -0
- /kaa/sprites/{37215a56-f8e1-4f22-a148-9894136f6ab1.png → affc87db-2f63-4e4a-855e-6ff608226f1e.png} +0 -0
- /kaa/sprites/{d1ea0ea6-4a6a-4036-b140-922c95a648b5.png → b02c15b5-04b4-40d9-bb13-267786e8e049.png} +0 -0
- /kaa/sprites/{22dc4cfe-8c66-4461-8660-e2d11bbe6154.png → b7f62cab-cc24-480e-bf4c-25c43a1e801e.png} +0 -0
- /kaa/sprites/{5906d986-d0e5-452d-a7c4-ddeb7af8751d.png → bd4cd421-f702-47c0-9f8b-77914973108c.png} +0 -0
- /kaa/sprites/{8bd22fe1-b544-4d2e-b74a-34f3cf0eb512.png → c4505a31-74c5-4b3d-bfcf-a67c3ef0039e.png} +0 -0
- /kaa/sprites/{e13fc34b-accc-4986-865d-f8d8410b45e9.png → c6b6b77b-2ec7-4fb7-8033-f4d061f4e9c8.png} +0 -0
- /kaa/sprites/{2b6d2eb0-bcf7-4bea-b037-6293d9c6d728.png → c76c6ccb-d099-4c3c-9eda-13be33aa48ae.png} +0 -0
- /kaa/sprites/{0562f69f-0300-4a2b-8252-63f3e7180e4c.png → cb15d9a3-78fe-4f03-bd23-90ba6169ddff.png} +0 -0
- /kaa/sprites/{2a8626df-056c-46a2-aaf3-0060a5aef6a3.png → d1bdfa3b-34df-488d-9f9b-8c7b04dd4ab3.png} +0 -0
- /kaa/sprites/{3aed50a2-d640-4178-9b8a-4dd7973eebf1.png → d8ba1932-978c-451c-a717-d7d2b6db35d9.png} +0 -0
- /kaa/sprites/{f635499a-943d-47da-952a-1feb58daa25b.png → e7630ccb-6824-49e3-986f-2a65a2c4a948.png} +0 -0
- /kaa/sprites/{847eb5c0-0350-4b7c-9c9c-43c796709795.png → ec35a0b8-1afa-48ff-ae66-9c1ef966348d.png} +0 -0
- {ksaa-2025.11b1.dist-info → ksaa-2025.11b3.dist-info}/WHEEL +0 -0
- {ksaa-2025.11b1.dist-info → ksaa-2025.11b3.dist-info}/entry_points.txt +0 -0
- {ksaa-2025.11b1.dist-info → ksaa-2025.11b3.dist-info}/licenses/LICENSE +0 -0
- {ksaa-2025.11b1.dist-info → ksaa-2025.11b3.dist-info}/top_level.txt +0 -0
kaa/tasks/produce/common.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
from typing import Literal
|
|
2
1
|
from logging import getLogger
|
|
2
|
+
from typing import Literal, Callable
|
|
3
3
|
|
|
4
|
+
from cv2.typing import MatLike
|
|
4
5
|
from kotonebot import (
|
|
5
6
|
ocr,
|
|
6
7
|
device,
|
|
@@ -10,16 +11,23 @@ from kotonebot import (
|
|
|
10
11
|
Loop,
|
|
11
12
|
Interval,
|
|
12
13
|
)
|
|
13
|
-
from
|
|
14
|
-
from kaa.tasks.start_game import wait_for_home
|
|
14
|
+
from kotonebot.util import Countdown
|
|
15
15
|
from kotonebot.primitives import Rect
|
|
16
16
|
from kaa.tasks import R
|
|
17
|
+
from kaa.tasks.common import skip
|
|
17
18
|
from .p_drink import acquire_p_drink
|
|
18
19
|
from kotonebot.util import measure_time
|
|
20
|
+
from kotonebot.backend.core import Image
|
|
21
|
+
from kotonebot.errors import UnrecoverableError
|
|
22
|
+
|
|
23
|
+
from kaa.tasks import R
|
|
19
24
|
from kaa.config import conf
|
|
25
|
+
from .p_drink import acquire_p_drink
|
|
20
26
|
from kaa.tasks.actions.loading import loading
|
|
21
|
-
from kaa.
|
|
27
|
+
from kaa.config.schema import produce_solution
|
|
28
|
+
from kaa.tasks.start_game import wait_for_home
|
|
22
29
|
from kaa.tasks.actions.commu import handle_unread_commu
|
|
30
|
+
from kaa.game_ui import CommuEventButtonUI, dialog, badge
|
|
23
31
|
|
|
24
32
|
logger = getLogger(__name__)
|
|
25
33
|
|
|
@@ -257,109 +265,197 @@ def acquisition_date_change_dialog() -> AcquisitionType | None:
|
|
|
257
265
|
|
|
258
266
|
return None
|
|
259
267
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
return
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
268
|
+
# TODO: 这里要改善一下输出日志。
|
|
269
|
+
# Acquisitions finished. Handled: xxx(event name or 'none'). Checked: 12(number of acquisitions) / 12(number of acquisitions)
|
|
270
|
+
class ProduceInterrupt:
|
|
271
|
+
def __init__(self, *, timeout: float | None = None):
|
|
272
|
+
"""
|
|
273
|
+
:param timeout: 超时时间,单位秒。默认为 None,表示使用配置文件中的时间。
|
|
274
|
+
"""
|
|
275
|
+
timeout = timeout or conf().produce.interrupt_timeout
|
|
276
|
+
self.cd = Countdown(timeout)
|
|
277
|
+
|
|
278
|
+
@staticmethod
|
|
279
|
+
def _check_loading(img: MatLike) -> AcquisitionType | None:
|
|
280
|
+
"""检查加载画面"""
|
|
281
|
+
if loading():
|
|
282
|
+
logger.info("Loading...")
|
|
283
|
+
return "Loading"
|
|
284
|
+
return None
|
|
285
|
+
|
|
286
|
+
@staticmethod
|
|
287
|
+
def _check_skip_commu(img: MatLike) -> AcquisitionType | None:
|
|
288
|
+
"""检查跳过未读交流"""
|
|
289
|
+
logger.debug("Check skip commu...")
|
|
290
|
+
if produce_solution().data.skip_commu and handle_unread_commu(img):
|
|
291
|
+
return "SkipCommu"
|
|
292
|
+
return None
|
|
293
|
+
|
|
294
|
+
@staticmethod
|
|
295
|
+
def _check_pdrink_max(img: MatLike) -> AcquisitionType | None:
|
|
296
|
+
"""检查P饮料到达上限"""
|
|
297
|
+
logger.debug("Check PDrink max...")
|
|
298
|
+
# TODO: 需要封装一个更好的实现方式。比如 wait_stable?
|
|
285
299
|
if image.find(R.InPurodyuusu.TextPDrinkMax):
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
if
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
300
|
+
logger.debug("PDrink max found")
|
|
301
|
+
device.screenshot()
|
|
302
|
+
if image.find(R.InPurodyuusu.TextPDrinkMax):
|
|
303
|
+
# 有对话框标题,但是没找到确认按钮
|
|
304
|
+
# 可能是需要勾选一个饮料
|
|
305
|
+
# 也有可能是对话框正在往下退出
|
|
306
|
+
if not image.find(R.InPurodyuusu.ButtonLeave, colored=True):
|
|
307
|
+
logger.info("No leave button found, click checkbox")
|
|
308
|
+
if image.find(R.Common.CheckboxUnchecked, colored=True):
|
|
309
|
+
device.click()
|
|
310
|
+
sleep(0.2)
|
|
311
|
+
device.screenshot()
|
|
312
|
+
if leave := image.find(R.InPurodyuusu.ButtonLeave, colored=True):
|
|
313
|
+
logger.info("Leave button found")
|
|
314
|
+
device.click(leave)
|
|
315
|
+
return "PDrinkMax"
|
|
316
|
+
return None
|
|
317
|
+
|
|
318
|
+
@staticmethod
|
|
319
|
+
def _check_pdrink_max_confirm(img: MatLike) -> AcquisitionType | None:
|
|
320
|
+
"""检查P饮料到达上限确认提示框"""
|
|
321
|
+
# [kotonebot-resource/sprites/jp/in_purodyuusu/screenshot_pdrink_max_confirm.png]
|
|
302
322
|
if image.find(R.InPurodyuusu.TextPDrinkMaxConfirmTitle):
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
if handle_skill_card_enhance():
|
|
312
|
-
return "PSkillCardEnhanceSelect"
|
|
313
|
-
device.click(10, 10)
|
|
314
|
-
|
|
315
|
-
# 技能卡自选删除
|
|
316
|
-
if image.find(R.InPurodyuusu.IconTitleSkillCardRemoval):
|
|
317
|
-
if handle_skill_card_removal():
|
|
318
|
-
return "PSkillCardRemoveSelect"
|
|
319
|
-
device.click(10, 10)
|
|
320
|
-
|
|
321
|
-
# 网络中断弹窗
|
|
322
|
-
logger.debug("Check network error popup...")
|
|
323
|
-
if (image.find(R.Common.TextNetworkError)
|
|
324
|
-
and (btn_retry := image.find(R.Common.ButtonRetry))
|
|
325
|
-
):
|
|
326
|
-
logger.info("Network error popup found")
|
|
327
|
-
device.click(btn_retry)
|
|
328
|
-
return "NetworkError"
|
|
329
|
-
device.click(10, 10)
|
|
330
|
-
|
|
331
|
-
# 物品选择对话框
|
|
332
|
-
logger.debug("Check award select dialog...")
|
|
333
|
-
if image.find(R.InPurodyuusu.TextClaim):
|
|
334
|
-
logger.info("Award select dialog found.")
|
|
335
|
-
|
|
336
|
-
# P饮料选择
|
|
337
|
-
logger.debug("Check PDrink select...")
|
|
338
|
-
if image.find(R.InPurodyuusu.TextPDrink):
|
|
339
|
-
logger.info("PDrink select found")
|
|
340
|
-
acquire_p_drink()
|
|
341
|
-
return "PDrinkSelect"
|
|
342
|
-
# 技能卡选择
|
|
343
|
-
logger.debug("Check skill card select...")
|
|
344
|
-
if image.find(R.InPurodyuusu.TextSkillCard):
|
|
345
|
-
logger.info("Acquire skill card found")
|
|
346
|
-
acquire_skill_card()
|
|
347
|
-
return "PSkillCardSelect"
|
|
348
|
-
# P物品选择
|
|
349
|
-
logger.debug("Check PItem select...")
|
|
350
|
-
if image.find(R.InPurodyuusu.TextPItem):
|
|
351
|
-
logger.info("Acquire PItem found")
|
|
352
|
-
select_p_item()
|
|
353
|
-
return "PItemSelect"
|
|
354
|
-
device.click(10, 10)
|
|
355
|
-
|
|
356
|
-
# 日期变更
|
|
357
|
-
result = acquisition_date_change_dialog()
|
|
358
|
-
if result is not None:
|
|
359
|
-
return result
|
|
360
|
-
device.click(10, 10)
|
|
323
|
+
logger.debug("PDrink max confirm found")
|
|
324
|
+
device.screenshot()
|
|
325
|
+
if image.find(R.InPurodyuusu.TextPDrinkMaxConfirmTitle):
|
|
326
|
+
if confirm := image.find(R.Common.ButtonConfirm):
|
|
327
|
+
logger.info("Confirm button found")
|
|
328
|
+
device.click(confirm)
|
|
329
|
+
return "PDrinkMax"
|
|
330
|
+
return None
|
|
361
331
|
|
|
362
|
-
|
|
332
|
+
@staticmethod
|
|
333
|
+
def _check_skill_card_enhance(img: MatLike) -> AcquisitionType | None:
|
|
334
|
+
"""检查技能卡自选强化"""
|
|
335
|
+
if image.find(R.InPurodyuusu.IconTitleSkillCardEnhance):
|
|
336
|
+
if handle_skill_card_enhance():
|
|
337
|
+
return "PSkillCardEnhanceSelect"
|
|
338
|
+
return None
|
|
339
|
+
|
|
340
|
+
@staticmethod
|
|
341
|
+
def _check_skill_card_removal(img: MatLike) -> AcquisitionType | None:
|
|
342
|
+
"""检查技能卡自选删除"""
|
|
343
|
+
if image.find(R.InPurodyuusu.IconTitleSkillCardRemoval):
|
|
344
|
+
if handle_skill_card_removal():
|
|
345
|
+
return "PSkillCardRemoveSelect"
|
|
346
|
+
return None
|
|
347
|
+
|
|
348
|
+
@staticmethod
|
|
349
|
+
def _check_network_error(img: MatLike) -> AcquisitionType | None:
|
|
350
|
+
"""检查网络中断弹窗"""
|
|
351
|
+
logger.debug("Check network error popup...")
|
|
352
|
+
if (image.find(R.Common.TextNetworkError)
|
|
353
|
+
and (btn_retry := image.find(R.Common.ButtonRetry))
|
|
354
|
+
):
|
|
355
|
+
logger.info("Network error popup found")
|
|
356
|
+
device.click(btn_retry)
|
|
357
|
+
return "NetworkError"
|
|
358
|
+
return None
|
|
359
|
+
|
|
360
|
+
@staticmethod
|
|
361
|
+
def _check_award_select(img: MatLike) -> AcquisitionType | None:
|
|
362
|
+
"""检查物品选择对话框"""
|
|
363
|
+
logger.debug("Check award select dialog...")
|
|
364
|
+
if image.find(R.InPurodyuusu.TextClaim):
|
|
365
|
+
logger.info("Award select dialog found.")
|
|
366
|
+
|
|
367
|
+
# P饮料选择
|
|
368
|
+
logger.debug("Check PDrink select...")
|
|
369
|
+
if image.find(R.InPurodyuusu.TextPDrink):
|
|
370
|
+
logger.info("PDrink select found")
|
|
371
|
+
acquire_p_drink()
|
|
372
|
+
return "PDrinkSelect"
|
|
373
|
+
# 技能卡选择
|
|
374
|
+
logger.debug("Check skill card select...")
|
|
375
|
+
if image.find(R.InPurodyuusu.TextSkillCard):
|
|
376
|
+
logger.info("Acquire skill card found")
|
|
377
|
+
acquire_skill_card()
|
|
378
|
+
return "PSkillCardSelect"
|
|
379
|
+
# P物品选择
|
|
380
|
+
logger.debug("Check PItem select...")
|
|
381
|
+
if image.find(R.InPurodyuusu.TextPItem):
|
|
382
|
+
logger.info("Acquire PItem found")
|
|
383
|
+
select_p_item()
|
|
384
|
+
return "PItemSelect"
|
|
385
|
+
return None
|
|
386
|
+
|
|
387
|
+
@staticmethod
|
|
388
|
+
def _check_date_change(img: MatLike) -> AcquisitionType | None:
|
|
389
|
+
"""检查日期变更"""
|
|
390
|
+
result = acquisition_date_change_dialog()
|
|
391
|
+
if result is not None:
|
|
392
|
+
return result
|
|
393
|
+
return None
|
|
394
|
+
|
|
395
|
+
handlers = [
|
|
396
|
+
_check_loading,
|
|
397
|
+
_check_skip_commu,
|
|
398
|
+
_check_pdrink_max,
|
|
399
|
+
_check_pdrink_max_confirm,
|
|
400
|
+
_check_skill_card_enhance,
|
|
401
|
+
_check_skill_card_removal,
|
|
402
|
+
_check_network_error,
|
|
403
|
+
_check_award_select,
|
|
404
|
+
_check_date_change
|
|
405
|
+
]
|
|
406
|
+
|
|
407
|
+
@classmethod
|
|
408
|
+
@action('处理培育事件', screenshot_mode='manual')
|
|
409
|
+
def check(cls) -> AcquisitionType | None:
|
|
410
|
+
"""处理行动开始前和结束后可能需要处理的事件"""
|
|
411
|
+
img = device.screenshot()
|
|
412
|
+
logger.info("Acquisition stuffs...")
|
|
413
|
+
|
|
414
|
+
# 检查各个可能的中断事件
|
|
415
|
+
for handler in cls.handlers:
|
|
416
|
+
result = handler(img)
|
|
417
|
+
if result:
|
|
418
|
+
return result
|
|
419
|
+
skip()
|
|
420
|
+
|
|
421
|
+
return None
|
|
422
|
+
|
|
423
|
+
def resolve(self, end_condition: Callable[[], bool] | Image | None = None):
|
|
424
|
+
self.cd.reset().start()
|
|
425
|
+
result: Literal[False] | AcquisitionType | None = False
|
|
426
|
+
for l in Loop():
|
|
427
|
+
if end_condition is not None:
|
|
428
|
+
if callable(end_condition) and end_condition():
|
|
429
|
+
break
|
|
430
|
+
elif isinstance(end_condition, Image) and image.find(end_condition):
|
|
431
|
+
break
|
|
432
|
+
else:
|
|
433
|
+
if result is None:
|
|
434
|
+
break
|
|
435
|
+
|
|
436
|
+
if self.cd.expired():
|
|
437
|
+
raise UnrecoverableError("ProduceInterrupt.resolve timed out after 180 seconds")
|
|
438
|
+
|
|
439
|
+
img = l.screenshot
|
|
440
|
+
if img is None:
|
|
441
|
+
img = device.screenshot()
|
|
442
|
+
for handler in self.handlers:
|
|
443
|
+
result = handler(img)
|
|
444
|
+
if result:
|
|
445
|
+
break
|
|
446
|
+
skip()
|
|
447
|
+
|
|
448
|
+
def handle(self):
|
|
449
|
+
"""处理中断事件,并检查是否超时。"""
|
|
450
|
+
if self.cd.expired():
|
|
451
|
+
raise UnrecoverableError('Unable to detect produce scene. Reseason: timed out.')
|
|
452
|
+
return self.check()
|
|
453
|
+
|
|
454
|
+
def until(self, end_img: Image):
|
|
455
|
+
"""
|
|
456
|
+
持续处理中断事件,直到指定图片出现为止。
|
|
457
|
+
"""
|
|
458
|
+
return self.resolve(lambda: image.find(end_img) is not None)
|
|
363
459
|
|
|
364
460
|
def until_acquisition_clear():
|
|
365
461
|
"""
|
|
@@ -369,7 +465,7 @@ def until_acquisition_clear():
|
|
|
369
465
|
结束条件:任意
|
|
370
466
|
"""
|
|
371
467
|
interval = Interval(0.6)
|
|
372
|
-
while
|
|
468
|
+
while ProduceInterrupt.check():
|
|
373
469
|
interval.wait()
|
|
374
470
|
|
|
375
471
|
ORANGE_RANGE = ((14, 87, 23)), ((37, 211, 255))
|
|
@@ -2,9 +2,10 @@ import logging
|
|
|
2
2
|
from typing_extensions import assert_never
|
|
3
3
|
from typing import Literal
|
|
4
4
|
|
|
5
|
-
from kaa.config.schema import produce_solution
|
|
5
|
+
from kaa.config.schema import conf, produce_solution
|
|
6
6
|
from kaa.game_ui.schedule import Schedule
|
|
7
7
|
from kaa.tasks import R
|
|
8
|
+
from kaa.tasks.common import skip
|
|
8
9
|
from ..actions import loading
|
|
9
10
|
from kaa.game_ui import WhiteFilter, dialog
|
|
10
11
|
from ..actions.scenes import at_home
|
|
@@ -14,7 +15,7 @@ from kotonebot.errors import UnrecoverableError
|
|
|
14
15
|
from kotonebot.util import Countdown, cropped
|
|
15
16
|
from kotonebot.backend.loop import Loop
|
|
16
17
|
from kaa.config import ProduceAction, RecommendCardDetectionMode
|
|
17
|
-
from ..produce.common import until_acquisition_clear, commu_event,
|
|
18
|
+
from ..produce.common import until_acquisition_clear, commu_event, ProduceInterrupt
|
|
18
19
|
from kotonebot import ocr, device, contains, image, regex, action, sleep, wait
|
|
19
20
|
from ..produce.non_lesson_actions import (
|
|
20
21
|
enter_allowance, allowance_available,
|
|
@@ -141,9 +142,10 @@ def handle_recommended_action(final_week: bool = False) -> ProduceAction | None:
|
|
|
141
142
|
return recommended
|
|
142
143
|
|
|
143
144
|
|
|
144
|
-
@action('等待进入行动场景')
|
|
145
|
+
@action('等待进入行动场景', screenshot_mode='manual')
|
|
145
146
|
def until_action_scene(week_first: bool = False):
|
|
146
147
|
"""等待进入行动场景"""
|
|
148
|
+
pi = ProduceInterrupt()
|
|
147
149
|
for _ in Loop(interval=0.2):
|
|
148
150
|
if not image.find_multi([
|
|
149
151
|
R.InPurodyuusu.TextPDiary, # 普通周
|
|
@@ -158,13 +160,13 @@ def until_action_scene(week_first: bool = False):
|
|
|
158
160
|
# [screenshots/produce/in_produce/initial_commu_event.png]
|
|
159
161
|
if week_first and commu_event():
|
|
160
162
|
continue
|
|
161
|
-
if
|
|
163
|
+
if pi.handle():
|
|
162
164
|
continue
|
|
163
165
|
else:
|
|
164
166
|
logger.info("Now at action scene.")
|
|
165
167
|
return
|
|
166
168
|
|
|
167
|
-
@action('等待进入练习场景')
|
|
169
|
+
@action('等待进入练习场景', screenshot_mode='manual')
|
|
168
170
|
def until_practice_scene():
|
|
169
171
|
"""等待进入练习场景"""
|
|
170
172
|
for _ in Loop():
|
|
@@ -173,7 +175,7 @@ def until_practice_scene():
|
|
|
173
175
|
else:
|
|
174
176
|
break
|
|
175
177
|
|
|
176
|
-
@action('等待进入考试场景')
|
|
178
|
+
@action('等待进入考试场景', screenshot_mode='manual')
|
|
177
179
|
def until_exam_scene():
|
|
178
180
|
"""等待进入考试场景"""
|
|
179
181
|
# NOTE: is_exam_scene() 通过 OCR 剩余回合数判断是否处于考试场景。
|
|
@@ -342,7 +344,7 @@ def produce_end(has_live: bool = True):
|
|
|
342
344
|
elif image.find(R.Produce.TextSkipLiveDialogTitle):
|
|
343
345
|
logger.info("Confirming skip live.")
|
|
344
346
|
device.click(image.expect_wait(R.Common.IconButtonCheck))
|
|
345
|
-
|
|
347
|
+
skip()
|
|
346
348
|
else:
|
|
347
349
|
break
|
|
348
350
|
# 选择封面
|
|
@@ -385,7 +387,7 @@ def produce_end(has_live: bool = True):
|
|
|
385
387
|
break
|
|
386
388
|
else:
|
|
387
389
|
device.click_center()
|
|
388
|
-
|
|
390
|
+
skip() # 为了兼容has_live==False的情况
|
|
389
391
|
sleep(2)
|
|
390
392
|
# 后续动画
|
|
391
393
|
logger.info("Waiting for memory generation animation completed...")
|
|
@@ -750,8 +752,10 @@ def detect_produce_scene() -> ProduceStage:
|
|
|
750
752
|
结束状态:游戏主页面\n
|
|
751
753
|
"""
|
|
752
754
|
logger.info("Detecting current produce stage...")
|
|
753
|
-
|
|
755
|
+
cd = Countdown(conf().produce.interrupt_timeout).start()
|
|
754
756
|
for _ in Loop():
|
|
757
|
+
if cd.expired():
|
|
758
|
+
raise UnrecoverableError('Unable to detect produce scene. Reseason: timed out.')
|
|
755
759
|
# 行动场景
|
|
756
760
|
texts = ocr.ocr()
|
|
757
761
|
if (
|
|
@@ -769,7 +773,7 @@ def detect_produce_scene() -> ProduceStage:
|
|
|
769
773
|
logger.info("Detection result: At exam scene.")
|
|
770
774
|
return 'exam-ongoing'
|
|
771
775
|
else:
|
|
772
|
-
if
|
|
776
|
+
if ProduceInterrupt.check():
|
|
773
777
|
# 继续循环检测
|
|
774
778
|
pass
|
|
775
779
|
elif commu_event():
|
|
@@ -10,7 +10,7 @@ from kaa.game_ui import dialog
|
|
|
10
10
|
|
|
11
11
|
from kaa.tasks import R
|
|
12
12
|
from kaa.config import conf
|
|
13
|
-
from ..produce.common import
|
|
13
|
+
from ..produce.common import ProduceInterrupt
|
|
14
14
|
from kaa.game_ui.commu_event_buttons import CommuEventButtonUI
|
|
15
15
|
from kotonebot.util import Countdown
|
|
16
16
|
from kotonebot.backend.loop import Loop
|
|
@@ -57,12 +57,7 @@ def enter_study():
|
|
|
57
57
|
device.double_click(image.expect_wait(R.InPurodyuusu.ButtonIconStudy))
|
|
58
58
|
# 等待进入页面。中间可能会出现未读交流
|
|
59
59
|
# [screenshots/produce/action_study2.png]
|
|
60
|
-
|
|
61
|
-
if not image.find(R.InPurodyuusu.IconTitleStudy):
|
|
62
|
-
logger.debug("Waiting for 授業 screen.")
|
|
63
|
-
fast_acquisitions()
|
|
64
|
-
else:
|
|
65
|
-
break
|
|
60
|
+
ProduceInterrupt().until(R.InPurodyuusu.IconTitleStudy)
|
|
66
61
|
# 首先需要判断是不是自习课
|
|
67
62
|
# [kotonebot-resource\sprites\jp\in_purodyuusu\screenshot_study_self_study.png]
|
|
68
63
|
if image.find_multi([
|
|
@@ -105,11 +100,7 @@ def enter_study():
|
|
|
105
100
|
device.click(target_btn)
|
|
106
101
|
else:
|
|
107
102
|
device.double_click(target_btn)
|
|
108
|
-
|
|
109
|
-
if fast_acquisitions() is None:
|
|
110
|
-
logger.info("Waiting for acquisitions finished.")
|
|
111
|
-
else:
|
|
112
|
-
break
|
|
103
|
+
ProduceInterrupt().resolve()
|
|
113
104
|
logger.info("授業 completed.")
|
|
114
105
|
|
|
115
106
|
|
|
@@ -126,13 +117,9 @@ def enter_allowance():
|
|
|
126
117
|
logger.info("Double clicking on 活動支給.")
|
|
127
118
|
device.double_click(image.expect(R.InPurodyuusu.ButtonTextAllowance), interval=1)
|
|
128
119
|
# 等待进入页面
|
|
129
|
-
|
|
130
|
-
if not image.find(R.InPurodyuusu.IconTitleAllowance):
|
|
131
|
-
logger.debug("Waiting for 活動支給 screen.")
|
|
132
|
-
fast_acquisitions()
|
|
133
|
-
else:
|
|
134
|
-
break
|
|
120
|
+
ProduceInterrupt().until(R.InPurodyuusu.IconTitleAllowance)
|
|
135
121
|
# 领取奖励
|
|
122
|
+
pi = ProduceInterrupt()
|
|
136
123
|
for _ in Loop():
|
|
137
124
|
# TODO: 检测是否在行动页面应当单独一个函数
|
|
138
125
|
if image.find_multi([
|
|
@@ -145,7 +132,7 @@ def enter_allowance():
|
|
|
145
132
|
device.click()
|
|
146
133
|
sleep(0.5) # 防止点击了第一个箱子后立马点击了第二个
|
|
147
134
|
continue
|
|
148
|
-
if
|
|
135
|
+
if pi.handle():
|
|
149
136
|
continue
|
|
150
137
|
logger.info("活動支給 completed.")
|
|
151
138
|
|
|
@@ -164,13 +151,7 @@ def enter_consult():
|
|
|
164
151
|
device.double_click(image.expect(R.InPurodyuusu.ButtonIconConsult), interval=1)
|
|
165
152
|
|
|
166
153
|
# 等待进入页面
|
|
167
|
-
|
|
168
|
-
if not image.find(R.InPurodyuusu.IconTitleConsult):
|
|
169
|
-
device.screenshot()
|
|
170
|
-
logger.debug("Waiting for 相談 screen.")
|
|
171
|
-
fast_acquisitions()
|
|
172
|
-
else:
|
|
173
|
-
break
|
|
154
|
+
ProduceInterrupt().until(R.InPurodyuusu.IconTitleConsult)
|
|
174
155
|
# # 尝试固定购买第一个物品
|
|
175
156
|
# device.click(R.InPurodyuusu.PointConsultFirstItem)
|
|
176
157
|
# sleep(0.5)
|
|
@@ -282,12 +263,7 @@ def enter_outing():
|
|
|
282
263
|
logger.info("Double clicking on おでかけ.")
|
|
283
264
|
device.double_click(image.expect(R.InPurodyuusu.ButtonIconOuting))
|
|
284
265
|
# 等待进入页面
|
|
285
|
-
|
|
286
|
-
if not image.find(R.InPurodyuusu.TitleIconOuting):
|
|
287
|
-
logger.debug("Waiting for おでかけ screen.")
|
|
288
|
-
fast_acquisitions()
|
|
289
|
-
else:
|
|
290
|
-
break
|
|
266
|
+
ProduceInterrupt().until(R.InPurodyuusu.TitleIconOuting)
|
|
291
267
|
# 固定选中第二个选项
|
|
292
268
|
# TODO: 可能需要二次处理外出事件
|
|
293
269
|
# [kotonebot-resource\sprites\jp\in_purodyuusu\screenshot_outing.png]
|
|
@@ -301,10 +277,11 @@ def enter_outing():
|
|
|
301
277
|
device.click(target_btn)
|
|
302
278
|
else:
|
|
303
279
|
device.double_click(target_btn)
|
|
280
|
+
pi = ProduceInterrupt()
|
|
304
281
|
for _ in Loop():
|
|
305
282
|
if at_action_scene():
|
|
306
283
|
break
|
|
307
|
-
elif
|
|
284
|
+
elif pi.handle():
|
|
308
285
|
pass
|
|
309
286
|
# [screenshots\produce\outing_ap_confirm.png]
|
|
310
287
|
elif image.find(R.Common.ButtonSelect2):
|
kaa/tasks/produce/p_drink.py
CHANGED
|
@@ -17,6 +17,9 @@ POSTIONS = [
|
|
|
17
17
|
def acquire_p_drink():
|
|
18
18
|
"""
|
|
19
19
|
领取 P 饮料
|
|
20
|
+
|
|
21
|
+
前置:领取饮料弹窗
|
|
22
|
+
|
|
20
23
|
:param index: 要领取的 P 饮料的索引。从 0 开始。
|
|
21
24
|
"""
|
|
22
25
|
# TODO: 随机领取一个饮料改成根据具体情况确定最佳
|
|
@@ -26,7 +29,8 @@ def acquire_p_drink():
|
|
|
26
29
|
logger.info("Skip claiming PDrink.")
|
|
27
30
|
device.click()
|
|
28
31
|
sleep(0.3)
|
|
29
|
-
|
|
32
|
+
if image.find(R.InPurodyuusu.ButtonDontClaim):
|
|
33
|
+
device.click()
|
|
30
34
|
else:
|
|
31
35
|
# 点击饮料
|
|
32
36
|
device.click(POSTIONS[0])
|
kaa/tasks/produce/produce.py
CHANGED
|
@@ -242,7 +242,8 @@ def do_produce(
|
|
|
242
242
|
# [kotonebot-resource\sprites\jp\produce\screenshot_no_enough_ap_2.png]
|
|
243
243
|
# [kotonebot-resource\sprites\jp\produce\screenshot_no_enough_ap_3.png]
|
|
244
244
|
logger.info('AP insufficient. Try to use AP drink.')
|
|
245
|
-
for _ in Loop():
|
|
245
|
+
for _ in Loop(interval=1):
|
|
246
|
+
# HACK: 这里设置 interval 是 #91 的临时 workaround
|
|
246
247
|
if image.find(R.Produce.ButtonUse, colored=True):
|
|
247
248
|
device.click()
|
|
248
249
|
elif image.find(R.Produce.ButtonRefillAP):
|
kaa/tasks/start_game.py
CHANGED
|
@@ -16,6 +16,7 @@ from .actions.loading import loading
|
|
|
16
16
|
from kaa.config import Priority, conf
|
|
17
17
|
from .actions.scenes import at_home, goto_home
|
|
18
18
|
from .actions.commu import handle_unread_commu
|
|
19
|
+
from kaa.tasks.common import skip
|
|
19
20
|
from kaa.errors import ElevationRequiredError, GameUpdateNeededError, DmmGameLaunchError
|
|
20
21
|
|
|
21
22
|
logger = logging.getLogger(__name__)
|
|
@@ -138,7 +139,7 @@ def wait_for_home():
|
|
|
138
139
|
device.click()
|
|
139
140
|
|
|
140
141
|
if should_click and click_cd.expired():
|
|
141
|
-
|
|
142
|
+
skip()
|
|
142
143
|
click_cd.reset()
|
|
143
144
|
|
|
144
145
|
@action('启动游戏.Android', screenshot_mode='manual-inherit')
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ksaa
|
|
3
|
-
Version: 2025.
|
|
3
|
+
Version: 2025.11b3
|
|
4
4
|
Summary: Kotones Auto Assistant(kaa) is a script for game 'Gakuen Idol M@ster' that automates the dailies and produces.
|
|
5
|
-
Requires-Python: ~=3.10
|
|
5
|
+
Requires-Python: ~=3.10.0
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
7
7
|
License-File: LICENSE
|
|
8
8
|
Requires-Dist: opencv-python==4.10.0.84
|
|
@@ -24,11 +24,12 @@ Requires-Dist: typing-extensions==4.12.2
|
|
|
24
24
|
Requires-Dist: python-dotenv==1.0.1
|
|
25
25
|
Requires-Dist: onnxruntime==1.14.0
|
|
26
26
|
Requires-Dist: numpy<2.0
|
|
27
|
-
Requires-Dist: pywin32==310
|
|
28
|
-
Requires-Dist: ahk==1.8.3
|
|
29
|
-
Requires-Dist: win11toast==0.35
|
|
27
|
+
Requires-Dist: pywin32==310; sys_platform == "win32"
|
|
28
|
+
Requires-Dist: ahk==1.8.3; sys_platform == "win32"
|
|
29
|
+
Requires-Dist: win11toast==0.35; sys_platform == "win32"
|
|
30
30
|
Requires-Dist: keyboard==0.13.5
|
|
31
|
-
Requires-Dist: kotonebot[android
|
|
31
|
+
Requires-Dist: kotonebot[android]==0.5.0
|
|
32
|
+
Requires-Dist: kotonebot[windows]==0.5.0; sys_platform == "win32"
|
|
32
33
|
Dynamic: license-file
|
|
33
34
|
|
|
34
35
|
# Kotone's Auto Assistant 琴音小助手
|
|
@@ -123,6 +124,8 @@ kaa
|
|
|
123
124
|
main 分支为开发分支与测试版发布分支,release 分支为稳定版发布分支。所有 PR 都应提交到 main 分支。
|
|
124
125
|
其他分支均为临时分支,请不要提交到这些分支。
|
|
125
126
|
|
|
127
|
+
提交 PR 前建议你先进行覆盖率自测,详见“开发指南 ##测试”。
|
|
128
|
+
|
|
126
129
|
## 路线图
|
|
127
130
|
下面是待实现的功能:
|
|
128
131
|
(带删除线标记的为已完成)
|