ksaa 2025.5.23.0__py3-none-any.whl → 2025.5.23.2__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/client/factory.py +8 -2
- kotonebot/client/host/custom.py +8 -3
- kotonebot/client/host/mumu12_host.py +12 -4
- kotonebot/config/base_config.py +1 -1
- kotonebot/kaa/main/gr.py +40 -28
- kotonebot/kaa/main/kaa.py +7 -7
- kotonebot/kaa/metadata.py +17 -0
- kotonebot/kaa/tasks/R.py +133 -133
- kotonebot/kaa/tasks/end_game.py +4 -1
- {ksaa-2025.5.23.0.dist-info → ksaa-2025.5.23.2.dist-info}/METADATA +1 -1
- {ksaa-2025.5.23.0.dist-info → ksaa-2025.5.23.2.dist-info}/RECORD +147 -147
- /kotonebot/kaa/sprites/{85ea2edc-b508-4b23-bcc8-1277e8cb05b2.png → 03f46f59-a90e-4d78-b218-474473e4ec6e.png} +0 -0
- /kotonebot/kaa/sprites/{f3075a74-6297-418d-918a-896361e23703.png → 0673f22f-a766-4f05-a32e-6ae92d9ebd6f.png} +0 -0
- /kotonebot/kaa/sprites/{6c793707-0535-4146-b53c-3d8c1c0d8c2f.png → 097346ef-9951-4989-8df3-7b71459e2230.png} +0 -0
- /kotonebot/kaa/sprites/{9f617ed4-118a-4ba0-a8bd-fe0c6b21d586.png → 09f7e1c8-9ba3-40fb-b135-b3908956cb63.png} +0 -0
- /kotonebot/kaa/sprites/{9ce1fe0c-4aae-4efe-83fa-bf431ab62ab8.png → 0b0ee4bd-78f6-42cd-ae40-ad232bf6e33c.png} +0 -0
- /kotonebot/kaa/sprites/{cc55d4ca-6d9a-40fd-be6b-8776d9381979.png → 0b49fc7d-fe42-44b9-9f2e-69e39cd1b267.png} +0 -0
- /kotonebot/kaa/sprites/{17d6c160-56a9-46f3-bc08-e85e85984c29.png → 0e1150eb-e6cf-4ee1-a5e2-2610111bb460.png} +0 -0
- /kotonebot/kaa/sprites/{aad5dc2d-8121-4f5e-8f4e-2a7b5cea8200.png → 0e7b4802-c445-4baa-bf38-f2589b39527b.png} +0 -0
- /kotonebot/kaa/sprites/{dc8be9f6-a45d-4d7f-bda1-f0cd7d5171cd.png → 0fe025ae-98be-48f0-9c23-e47ddc69d932.png} +0 -0
- /kotonebot/kaa/sprites/{2e01ea79-ed1b-46c6-a60d-61762e70356e.png → 112db090-fb51-413f-8f7b-6859b98bc1eb.png} +0 -0
- /kotonebot/kaa/sprites/{baaf7380-6da7-4234-8368-d90f711e9ccd.png → 1157e138-6b65-497d-8b51-0a37ebf77b91.png} +0 -0
- /kotonebot/kaa/sprites/{9db57c4d-d7d8-45a9-8a7c-b68e0bb113c8.png → 13b25df3-9bba-4195-8a49-3c41d6d1ef0d.png} +0 -0
- /kotonebot/kaa/sprites/{8b4a0233-ace4-4551-931f-ff15e33c1c2c.png → 1630ce5d-cdb1-42b5-9dcb-57aaeabcd46f.png} +0 -0
- /kotonebot/kaa/sprites/{b62eeea5-48e7-47c3-bf00-355870190b40.png → 18a55200-aee1-4dfc-867b-8958137a1ecd.png} +0 -0
- /kotonebot/kaa/sprites/{5a31f717-083b-4086-9eaf-ed131982f22f.png → 1a1b970e-9cf0-49b6-a765-45170689f427.png} +0 -0
- /kotonebot/kaa/sprites/{6b7cb3b3-edff-4668-acaa-92cc3fa035f9.png → 1c18153e-8207-4dc6-a057-ad06c626003d.png} +0 -0
- /kotonebot/kaa/sprites/{3a9e305c-3bfb-4e03-b516-5d2f1fdde3ac.png → 207c9bc9-d89f-4fa5-8b9a-5dd084708c1f.png} +0 -0
- /kotonebot/kaa/sprites/{6763a087-099a-425c-875d-1586f5d3d624.png → 240152d2-fd3e-40f7-8023-5f105f215d5c.png} +0 -0
- /kotonebot/kaa/sprites/{d3bbcccd-6b1f-4468-9e1d-78d9e3c5b50d.png → 26159619-42da-42d6-af30-c3d07e6a4a7b.png} +0 -0
- /kotonebot/kaa/sprites/{305f4efc-44aa-40a3-829a-cbfb11667e70.png → 26c544a9-8e09-454d-8ddf-9358f83354e0.png} +0 -0
- /kotonebot/kaa/sprites/{b343a359-8311-499f-b96d-1a47f07916c3.png → 27b15f5e-e803-4bcc-bf55-2d5829df73ab.png} +0 -0
- /kotonebot/kaa/sprites/{86033fa1-a02d-4307-8d01-ae37a873f650.png → 27b26162-2eb6-4513-aa8b-72d1baefd5f7.png} +0 -0
- /kotonebot/kaa/sprites/{f3874241-8c5f-4508-9577-f2966d4557dc.png → 2888b46f-ab47-4f57-9342-74f3d434a585.png} +0 -0
- /kotonebot/kaa/sprites/{8cd7630c-b343-42e1-8e12-bbddcc338e56.png → 2b9f424d-2c5e-4d84-900a-2646fc131527.png} +0 -0
- /kotonebot/kaa/sprites/{4c9a62ad-7c12-4093-b8c9-b9074112bc41.png → 2e173b48-333e-44e6-a29f-28f1e8ca450d.png} +0 -0
- /kotonebot/kaa/sprites/{4575ec70-0147-4287-b2ab-e78e9622072c.png → 31c249b7-05ef-4e2a-b157-91976f564bef.png} +0 -0
- /kotonebot/kaa/sprites/{c409f292-8a99-4f34-b465-c42d6ed04cc7.png → 329013cc-7bf0-45e3-bb24-a38cbcf0d2f9.png} +0 -0
- /kotonebot/kaa/sprites/{4586b495-4151-434b-ba97-693f31cfe017.png → 32a92eb3-8bc8-4021-ade4-d633deabb8b9.png} +0 -0
- /kotonebot/kaa/sprites/{62cecda6-30aa-4e25-b74a-fe7726d3cd75.png → 3436165b-94cb-4fe4-929f-51f3dbe4b7c8.png} +0 -0
- /kotonebot/kaa/sprites/{d443e15b-0869-404b-89cc-04a27f8602e6.png → 347c5a29-b1d2-40ab-a385-ff42a36e1ea7.png} +0 -0
- /kotonebot/kaa/sprites/{b71b7873-29c1-4d7a-895b-9ca7f5c0313a.png → 37690104-f535-4a19-8640-bf310e4b6a52.png} +0 -0
- /kotonebot/kaa/sprites/{e82e7eac-f541-42c7-97fc-7e7f5684e862.png → 38030889-3d17-4648-8f37-572da43944cf.png} +0 -0
- /kotonebot/kaa/sprites/{24f4e1b3-3697-48c8-b253-147c32099c7d.png → 38f9d826-4a3f-4bab-87fc-b55a49cbc2a1.png} +0 -0
- /kotonebot/kaa/sprites/{191af9b6-75ec-4b9c-9cd8-acb8073670fc.png → 39f36c02-8132-42d5-91fb-59dc57ceea70.png} +0 -0
- /kotonebot/kaa/sprites/{c8ec4f98-3025-4366-9221-6fb69fd930d7.png → 3a267e0c-d644-410d-a889-cea60ab5e206.png} +0 -0
- /kotonebot/kaa/sprites/{2683cb88-4e76-48df-875e-571c1be71262.png → 3c75ffa8-c197-4e88-949e-75b48621ae20.png} +0 -0
- /kotonebot/kaa/sprites/{a6dedf3b-32fb-4ac0-b035-8466b375710d.png → 3d13cc4d-30d3-4044-bdc2-da932581fa4f.png} +0 -0
- /kotonebot/kaa/sprites/{3f0d4968-8c48-4f6a-ba8c-55fda72dc7e0.png → 4255d2b3-5ee5-46e5-a35c-515500199d50.png} +0 -0
- /kotonebot/kaa/sprites/{5c68a4a5-c221-4095-ad60-bc15fd207b8b.png → 426dcc3e-2556-45b6-9ca9-b9acce8b0222.png} +0 -0
- /kotonebot/kaa/sprites/{eb617da8-23bf-462a-98fc-d89e9a3063a2.png → 4281236e-1fee-48ca-9a5a-70dbd5971801.png} +0 -0
- /kotonebot/kaa/sprites/{0590d364-2d8a-4743-b3c6-8b06a8902eba.png → 43b335ee-9c0f-4b70-8d22-e1aa209a384c.png} +0 -0
- /kotonebot/kaa/sprites/{c4510fd6-237c-4578-bee4-9e5c73fc5830.png → 48dc8d02-ea41-49a2-b993-2af26979183c.png} +0 -0
- /kotonebot/kaa/sprites/{442d7deb-2dec-4b61-afb9-00c21a756724.png → 4a163f23-a48c-46eb-b03e-ab0b269d5216.png} +0 -0
- /kotonebot/kaa/sprites/{5f9b7109-335e-4b5a-b0e9-34590b693976.png → 50d91433-f3a0-4264-8719-289de3739c6c.png} +0 -0
- /kotonebot/kaa/sprites/{41d5bd29-838b-4365-a2b8-0c7d3e6d8040.png → 50d923e8-d647-4741-a81d-7ad8ac67a79f.png} +0 -0
- /kotonebot/kaa/sprites/{4d1dc493-9d1a-46a8-86a3-61b6eeb44166.png → 5931b4e7-abd4-414f-a27a-357916bf9999.png} +0 -0
- /kotonebot/kaa/sprites/{3ea127da-166d-4ff1-9748-b52985b7a426.png → 593503e0-a673-4910-83a9-b7e4f7c43568.png} +0 -0
- /kotonebot/kaa/sprites/{b3e0fc29-1664-4301-a92d-7b3371d566dc.png → 5d86c075-3156-48c8-8cb2-66be1e32d97b.png} +0 -0
- /kotonebot/kaa/sprites/{18412951-a2a4-4098-ac93-e36f951fe6a3.png → 5ece0028-7af2-4b13-bcbc-6a923a2149db.png} +0 -0
- /kotonebot/kaa/sprites/{dede75f5-1b61-44c4-9a4d-5751ac529337.png → 61ed91d6-b4d9-4e82-9155-da706b700ce7.png} +0 -0
- /kotonebot/kaa/sprites/{10dd5320-7d5c-4901-a9aa-3a8cdd6eee0f.png → 637f8470-1780-4f74-8a4c-d2fdb1fe5b9b.png} +0 -0
- /kotonebot/kaa/sprites/{0888b793-4084-479b-a3bb-1ad5e0de1f63.png → 654e8eaf-e83c-41a4-a55e-6c4cdd0d8fdc.png} +0 -0
- /kotonebot/kaa/sprites/{9c965862-ec78-4b66-b9d8-8e606b502e5d.png → 655ffd1b-88bb-4174-9e98-82fc40ab86b6.png} +0 -0
- /kotonebot/kaa/sprites/{947645a0-bce3-4807-8459-9f8cd958f09e.png → 6624e6af-81d0-47aa-be7c-b03fa1ebed71.png} +0 -0
- /kotonebot/kaa/sprites/{f0e5c302-65c2-4976-b3ca-771b4ddd1922.png → 664ecf07-b3cf-4d61-9ea8-288b1b3bccb9.png} +0 -0
- /kotonebot/kaa/sprites/{24e2bee3-a981-4acb-a6d4-ba558ecdb447.png → 685e377b-3108-44a3-a384-1b527fb4c980.png} +0 -0
- /kotonebot/kaa/sprites/{ae4a4dfd-01bc-4a8a-8807-241b0d158f2e.png → 69a0d1e3-4a97-494a-a1fe-cf85d1412ccb.png} +0 -0
- /kotonebot/kaa/sprites/{a1189ca3-e642-4ed7-b935-40f63da46986.png → 6c332793-741c-49a1-bd60-a9533de744fc.png} +0 -0
- /kotonebot/kaa/sprites/{ad1655b1-93c1-4cee-88ad-83a833dbbfc1.png → 6e75aa68-7b5a-4e8a-9c11-778ea3a04acf.png} +0 -0
- /kotonebot/kaa/sprites/{ac475d95-aa46-49f7-afda-e5bbbd3ef11b.png → 6f4cd73b-dc7d-4671-9481-793d12c606bb.png} +0 -0
- /kotonebot/kaa/sprites/{cb8414fe-5ee1-4ae2-914c-f19d6271d8a6.png → 701f9931-d33f-4443-9b31-24e9553f5133.png} +0 -0
- /kotonebot/kaa/sprites/{db4308dd-294f-43e8-af8e-744125548b24.png → 71ef7bee-9b67-4968-80a8-f5b658458651.png} +0 -0
- /kotonebot/kaa/sprites/{3011e930-0a44-411a-a51c-9674559a7a79.png → 7ce714eb-7380-4069-bacb-25d68b9aa895.png} +0 -0
- /kotonebot/kaa/sprites/{bb681200-a6a1-49f3-a17b-0b8afbeaf69a.png → 824ee5ae-b3c0-4839-b277-f6be5a968f30.png} +0 -0
- /kotonebot/kaa/sprites/{3899fdd3-1e6c-426f-84fc-07fc7f142285.png → 82cc8881-1e3a-41a1-9845-135a40521558.png} +0 -0
- /kotonebot/kaa/sprites/{a3cd94c6-978a-4092-bc1f-da669a9472e7.png → 8314ad8f-1ac4-4ce6-86b5-4d3f11b9ed87.png} +0 -0
- /kotonebot/kaa/sprites/{a5b8f5ab-df6c-43db-adf7-5989220e48ca.png → 85aba299-2625-47e1-a016-b25298fbb688.png} +0 -0
- /kotonebot/kaa/sprites/{6e213f63-8915-4d69-922a-03e5f09c409d.png → 86538a9c-d267-48d8-935f-ae9ec05073e3.png} +0 -0
- /kotonebot/kaa/sprites/{3da30a90-8e12-4467-9c2a-9f329b12fff3.png → 8e3a97d3-d34a-4c78-a08b-2cacb4da42bc.png} +0 -0
- /kotonebot/kaa/sprites/{5eba9fd5-edc8-4621-b97f-d2654cf9b64e.png → 9229fe6b-f0bd-4502-be35-5818dfdbc732.png} +0 -0
- /kotonebot/kaa/sprites/{54bd3138-a66a-45ee-950b-72e2aeb99143.png → 9255b257-16b6-4c2e-ad93-3fc0ef5aac32.png} +0 -0
- /kotonebot/kaa/sprites/{a9df4cf5-c960-48eb-96c0-2beb97ef0964.png → 94f21a05-154b-44a6-9f93-ca41dce3b5de.png} +0 -0
- /kotonebot/kaa/sprites/{5ca2f04c-16ce-491a-ac5f-fe1426a3ba7f.png → 95a5c724-2f9f-4d6f-ad44-b5b5d29b9c89.png} +0 -0
- /kotonebot/kaa/sprites/{a970297a-c7f1-42cd-a0ce-42f20a2c5571.png → 99090cad-ca7e-4bd3-b38f-1f8ed6f01ed4.png} +0 -0
- /kotonebot/kaa/sprites/{6b6f0f50-086b-498b-89bc-b2abc0e2b723.png → 99a48c79-ab3a-4688-bed6-1d4c35e720fc.png} +0 -0
- /kotonebot/kaa/sprites/{f40db0e0-09a3-48d0-a222-6b23984357a7.png → 99fee062-0d95-4d47-8266-d8649c3c3ff4.png} +0 -0
- /kotonebot/kaa/sprites/{b9350939-5437-49b6-9ef4-eee3b9bd49e2.png → 9b4ea9ad-0d0a-4f0c-8018-da8a24fe4e5f.png} +0 -0
- /kotonebot/kaa/sprites/{0941ec23-b5c7-4513-b5d6-3e65a84eaec6.png → 9d2b4c3f-aa77-4aec-8f78-b25bbd650d5b.png} +0 -0
- /kotonebot/kaa/sprites/{789ac59e-aeae-4f4b-9086-e075e7a05718.png → 9ff6e594-b4c6-4aae-a412-52c83fc5bc3c.png} +0 -0
- /kotonebot/kaa/sprites/{3af1f5c7-bc33-48c8-96bd-9de2060a6cd2.png → a26ca6a4-2a8d-4472-86d7-990cc5df01de.png} +0 -0
- /kotonebot/kaa/sprites/{73b64703-2352-4a86-b40f-1e6e416fdd58.png → a6e18008-0caa-42d5-ae04-6f015f04a6df.png} +0 -0
- /kotonebot/kaa/sprites/{0712678b-e13f-49c2-b144-4a3d3e342836.png → a885df26-00d6-4e4c-8bb2-626f68ea06ad.png} +0 -0
- /kotonebot/kaa/sprites/{4c315af5-32b9-43a4-8e7d-15cf353bcb03.png → aadb0941-88b4-4333-9571-7caf97782e75.png} +0 -0
- /kotonebot/kaa/sprites/{5bb9b015-9895-4180-917f-cb01e549e3fd.png → ad6de3fd-8486-46e5-b2eb-27c5f73b146a.png} +0 -0
- /kotonebot/kaa/sprites/{84b1a4ed-f9d3-4627-a35a-0f38096b919c.png → b2b36034-4f08-4826-835a-b97d7641529f.png} +0 -0
- /kotonebot/kaa/sprites/{a642cdd7-4ae6-4b30-be1b-db518541452d.png → b590b94b-8b76-466a-809d-0a16a37e2eb7.png} +0 -0
- /kotonebot/kaa/sprites/{88708972-934e-4954-a502-87996823dc16.png → b5931274-f987-4bc5-bd00-2296a9be6f68.png} +0 -0
- /kotonebot/kaa/sprites/{21e349ce-6b24-4978-800b-64bb023dac4c.png → b6660670-834a-499d-85c8-a51d8ac2f951.png} +0 -0
- /kotonebot/kaa/sprites/{8488a18d-98fb-4cb6-bc63-3055e746e3df.png → ba583fe8-7334-47b3-8c19-6394bfeee16d.png} +0 -0
- /kotonebot/kaa/sprites/{49dcd6ac-407a-415a-a237-2425a9aed30d.png → bb9fbfe9-f913-4220-8704-157095456f06.png} +0 -0
- /kotonebot/kaa/sprites/{cf43d0d1-beb1-46e8-a0aa-be6d87d381ba.png → bbb5b48b-ba98-4fa3-bd6d-f079c42acabf.png} +0 -0
- /kotonebot/kaa/sprites/{b38b3a91-49f6-4699-a3f0-dd7de89b2a42.png → bbc002f3-4c6c-40b1-bfbc-891d8a407412.png} +0 -0
- /kotonebot/kaa/sprites/{65946928-f48f-48fa-b561-f44b8db7f5ef.png → bdca0571-b1be-4c97-a59d-016512f412b1.png} +0 -0
- /kotonebot/kaa/sprites/{1ab5a8b6-4a8d-4964-b867-e030dbcb8cea.png → c02c9b66-cecb-4bcb-b016-654a891b0ef4.png} +0 -0
- /kotonebot/kaa/sprites/{9fa1e7cb-e8b8-43c7-96e7-33ea86c60932.png → c158004f-7e76-4f8d-95e8-deea12251cbe.png} +0 -0
- /kotonebot/kaa/sprites/{7ccc662f-6727-49eb-a7de-fe28e14b949f.png → c3540ea8-70e3-409e-ba83-9761d238ae14.png} +0 -0
- /kotonebot/kaa/sprites/{2ab660e8-865a-41d9-acec-ab6b002f85bf.png → c5c16303-3858-4d5c-bc3c-18b7196ba030.png} +0 -0
- /kotonebot/kaa/sprites/{7d7f5644-3de6-48b2-bb12-6ab61657997a.png → c8ca0c53-a94d-4e7c-8bd8-bdd9912760e2.png} +0 -0
- /kotonebot/kaa/sprites/{66f9d590-ae1d-4c29-8b2b-72be465457ae.png → c952a585-1004-48d7-b870-e144a60626b5.png} +0 -0
- /kotonebot/kaa/sprites/{2fd3276f-de84-4696-83fd-233f6b8f3b65.png → c96f3076-918f-4dd2-bb01-e74e07086812.png} +0 -0
- /kotonebot/kaa/sprites/{03a1da2f-c46d-47ce-a4a5-dbe3dee15154.png → c9c09edf-312f-4776-80fd-2571052a8894.png} +0 -0
- /kotonebot/kaa/sprites/{9b4c05d7-868d-49c8-95d4-c0a84d39c025.png → cdd6e06c-741d-4341-a080-51ce89d34a5d.png} +0 -0
- /kotonebot/kaa/sprites/{4b2aa727-048b-4120-81a2-3c11e2492146.png → d21d3557-6238-4ceb-a53d-3f9147421e80.png} +0 -0
- /kotonebot/kaa/sprites/{059e36cb-256b-409d-af50-2d6bbcda2991.png → d43f13a4-6160-4acd-8732-d614e3150807.png} +0 -0
- /kotonebot/kaa/sprites/{5fbede88-6f22-43c7-a6c5-e457470c30ce.png → d6dede34-0b2f-4803-bb9b-4da8a9c10b68.png} +0 -0
- /kotonebot/kaa/sprites/{c5e79a80-3ebd-4786-a8c9-ede13e110a92.png → d7167e88-c5b0-4aaf-a8f5-29977c3062aa.png} +0 -0
- /kotonebot/kaa/sprites/{a66f022a-87e1-4607-b5f1-8dd4a110f48e.png → d7481c1c-736a-41f5-afcf-e79bea74f881.png} +0 -0
- /kotonebot/kaa/sprites/{de629d6b-4d58-4065-8c21-435b6edcd205.png → d7916e81-7de3-49d5-91a7-2ecbba93835e.png} +0 -0
- /kotonebot/kaa/sprites/{d4d253c9-4fbf-4a62-b6c1-95ed1f35f752.png → db9f5641-1afb-4b02-89e8-222390c4cfca.png} +0 -0
- /kotonebot/kaa/sprites/{ef59c2b1-a915-4fe2-85b1-26dfb965a865.png → de71582f-4de3-450b-b4e8-dd9028b82f40.png} +0 -0
- /kotonebot/kaa/sprites/{fe4bc939-7302-4b48-a6d3-e4e25b8fe112.png → e1a156d6-874e-4a72-b5b1-05ea11bb1647.png} +0 -0
- /kotonebot/kaa/sprites/{f34ea72e-ce20-4d30-b332-a2be3cb656ce.png → e2809286-fbf5-40da-b442-ae8fae4babd3.png} +0 -0
- /kotonebot/kaa/sprites/{7283ab2c-0c5c-4d60-b86f-2e8382a2dca0.png → e4c6780b-798d-4298-bf6a-5e33c9ca1e8f.png} +0 -0
- /kotonebot/kaa/sprites/{315be5ba-6a88-477d-829a-36d1a0c20d5b.png → e58f5357-dd17-4498-8643-0c15c433d23e.png} +0 -0
- /kotonebot/kaa/sprites/{ccd3e45a-67f9-4528-9c1e-3b271681a4f3.png → e7683a0b-d4f7-4bcf-9b5d-ae73c41f0a78.png} +0 -0
- /kotonebot/kaa/sprites/{df643943-b856-4b6c-b898-bab41cea1cf2.png → e8d97522-852c-48d6-970b-fb60e23336e6.png} +0 -0
- /kotonebot/kaa/sprites/{32173834-1127-4d24-ae38-7e39aa285383.png → e91455c0-4b5a-49b0-b9e7-29ef5456ddc3.png} +0 -0
- /kotonebot/kaa/sprites/{e11102ca-c2b1-4a7a-8995-0823ad354dbb.png → ea291981-d7ac-433a-8703-2e7cc6ad5303.png} +0 -0
- /kotonebot/kaa/sprites/{59c4b7d6-b97d-4ef0-bd8c-fc4a524a2ec8.png → eaa079be-6b26-4e25-ac63-328d6f400c35.png} +0 -0
- /kotonebot/kaa/sprites/{95eeb164-9d4e-4cf6-b205-a8341a9b6bb0.png → edaf2b11-38e3-4d2b-b34f-2c01d23c2c35.png} +0 -0
- /kotonebot/kaa/sprites/{2aa3af38-e76b-46bd-b607-a1e0fa203e53.png → edd85973-ee6f-450f-85fa-102e78c806a5.png} +0 -0
- /kotonebot/kaa/sprites/{b4569380-d0ba-48e2-b697-2fd0c3169819.png → f220084e-939d-4505-b41a-f71d5ff89286.png} +0 -0
- /kotonebot/kaa/sprites/{22a9c3ad-79f8-4840-badc-679ffb563862.png → f220b5c7-432d-4fd0-abde-ec0a3a569489.png} +0 -0
- /kotonebot/kaa/sprites/{9dfa0e51-2460-4c3c-8ea3-9fa6bc09c8aa.png → f32d9ece-4fef-48a8-9be0-55f23acc5e6b.png} +0 -0
- /kotonebot/kaa/sprites/{b89facd5-f362-4ca8-b6be-b66f53a4081a.png → f7c1ee7f-62cf-4654-b684-19995570aa8a.png} +0 -0
- /kotonebot/kaa/sprites/{a0f13530-e3b0-459e-bcd5-18730e361485.png → f8c87b1e-87b6-491e-b22e-0409b98bd165.png} +0 -0
- /kotonebot/kaa/sprites/{0a9cf832-adb9-4f8e-9e19-a7283934ee51.png → fb2be5fb-f70f-4bfc-8ef9-d08440fafcab.png} +0 -0
- /kotonebot/kaa/sprites/{52792418-b921-43ce-a359-5fe0c16e78d2.png → fc146a5c-c154-4b44-b690-23470d9662e3.png} +0 -0
- /kotonebot/kaa/sprites/{13530bef-a2cc-4ae4-b435-b56d370a08a4.png → fd2bdf99-47c0-4ac6-9495-6c6be084d9c7.png} +0 -0
- /kotonebot/kaa/sprites/{31e62cdf-febe-41d5-a9cb-864dd979c110.png → fdf42d81-645a-41b5-868e-0a733f32992e.png} +0 -0
- /kotonebot/kaa/sprites/{6995892d-5f99-4e40-9849-3f9ef8bf7bdb.png → fe7d4d8b-03cf-4d73-8049-ab9e9a296b7f.png} +0 -0
- /kotonebot/kaa/sprites/{292d2da1-f9a0-43e3-9ae2-b0d9dbc0eade.png → fedc068b-148c-4e39-9f1f-6b4d6c055c66.png} +0 -0
- /kotonebot/kaa/sprites/{71c7edb4-f638-4b87-a066-5ac6d0ceafcc.png → fff0c75d-8819-48c6-adb5-97c79d2be401.png} +0 -0
- {ksaa-2025.5.23.0.dist-info → ksaa-2025.5.23.2.dist-info}/WHEEL +0 -0
- {ksaa-2025.5.23.0.dist-info → ksaa-2025.5.23.2.dist-info}/entry_points.txt +0 -0
- {ksaa-2025.5.23.0.dist-info → ksaa-2025.5.23.2.dist-info}/top_level.txt +0 -0
kotonebot/client/factory.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import logging
|
|
2
2
|
from typing import Literal
|
|
3
3
|
|
|
4
4
|
from .implements.adb import AdbImpl
|
|
@@ -11,6 +11,7 @@ from .device import Device, AndroidDevice, WindowsDevice
|
|
|
11
11
|
from adbutils import adb
|
|
12
12
|
|
|
13
13
|
DeviceImpl = Literal['adb', 'adb_raw', 'uiautomator2', 'windows', 'remote_windows']
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
14
15
|
|
|
15
16
|
def create_device(
|
|
16
17
|
addr: str,
|
|
@@ -39,14 +40,19 @@ def create_device(
|
|
|
39
40
|
"""
|
|
40
41
|
if impl in ['adb', 'adb_raw', 'uiautomator2']:
|
|
41
42
|
if disconnect:
|
|
43
|
+
logger.debug('adb disconnect %s', addr)
|
|
42
44
|
adb.disconnect(addr)
|
|
43
45
|
if connect:
|
|
46
|
+
logger.debug('adb connect %s', addr)
|
|
44
47
|
result = adb.connect(addr)
|
|
45
48
|
if 'cannot connect to' in result:
|
|
46
49
|
raise ValueError(result)
|
|
47
50
|
serial = device_serial or addr
|
|
51
|
+
logger.debug('adb wait for %s', serial)
|
|
48
52
|
adb.wait_for(serial, timeout=timeout)
|
|
49
|
-
|
|
53
|
+
devices = adb.device_list()
|
|
54
|
+
logger.debug('adb device_list: %s', devices)
|
|
55
|
+
d = [d for d in devices if d.serial == serial]
|
|
50
56
|
if len(d) == 0:
|
|
51
57
|
raise ValueError(f"Device {addr} not found")
|
|
52
58
|
d = d[0]
|
kotonebot/client/host/custom.py
CHANGED
|
@@ -14,9 +14,9 @@ P = ParamSpec('P')
|
|
|
14
14
|
T = TypeVar('T')
|
|
15
15
|
|
|
16
16
|
class CustomInstance(Instance):
|
|
17
|
-
def __init__(self, exe_path: str, emulator_args: str = "", *args, **kwargs):
|
|
17
|
+
def __init__(self, exe_path: str | None, emulator_args: str = "", *args, **kwargs):
|
|
18
18
|
super().__init__(*args, **kwargs)
|
|
19
|
-
self.exe_path: str = exe_path
|
|
19
|
+
self.exe_path: str | None = exe_path
|
|
20
20
|
self.exe_args: str = emulator_args
|
|
21
21
|
self.process: subprocess.Popen | None = None
|
|
22
22
|
|
|
@@ -26,6 +26,8 @@ class CustomInstance(Instance):
|
|
|
26
26
|
logger.warning('Process is already running.')
|
|
27
27
|
return
|
|
28
28
|
|
|
29
|
+
if not self.exe_path:
|
|
30
|
+
raise ValueError('Executable path is not set.')
|
|
29
31
|
if self.exe_args:
|
|
30
32
|
logger.info('Starting process "%s" with args "%s"...', self.exe_path, self.exe_args)
|
|
31
33
|
cmd = f'"{self.exe_path}" {self.exe_args}'
|
|
@@ -49,6 +51,9 @@ class CustomInstance(Instance):
|
|
|
49
51
|
if self.process is not None:
|
|
50
52
|
return True
|
|
51
53
|
else:
|
|
54
|
+
if not self.exe_path:
|
|
55
|
+
logger.warning('Executable path is not set, cannot check if process is running.')
|
|
56
|
+
return False
|
|
52
57
|
process_name = os.path.basename(self.exe_path)
|
|
53
58
|
p = next((proc for proc in process_iter() if proc.name() == process_name), None)
|
|
54
59
|
if p:
|
|
@@ -68,7 +73,7 @@ def _type_check(ins: Instance) -> CustomInstance:
|
|
|
68
73
|
raise ValueError(f'Instance {ins} is not a CustomInstance')
|
|
69
74
|
return ins
|
|
70
75
|
|
|
71
|
-
def create(exe_path: str, adb_ip: str, adb_port: int, adb_name: str, emulator_args: str = "") -> CustomInstance:
|
|
76
|
+
def create(exe_path: str | None, adb_ip: str, adb_port: int, adb_name: str | None, emulator_args: str = "") -> CustomInstance:
|
|
72
77
|
return CustomInstance(exe_path, emulator_args=emulator_args, id='custom', name='Custom', adb_ip=adb_ip, adb_port=adb_port, adb_name=adb_name)
|
|
73
78
|
|
|
74
79
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import os
|
|
2
|
+
import json
|
|
2
3
|
import subprocess
|
|
3
4
|
from functools import lru_cache
|
|
4
5
|
from typing import Any
|
|
@@ -83,7 +84,8 @@ class Mumu12Host(HostProtocol):
|
|
|
83
84
|
|
|
84
85
|
uninstall_subkeys = [
|
|
85
86
|
r'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MuMuPlayer-12.0',
|
|
86
|
-
|
|
87
|
+
# TODO: 支持国际版 MuMu
|
|
88
|
+
# r'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MuMuPlayerGlobal-12.0'
|
|
87
89
|
]
|
|
88
90
|
|
|
89
91
|
for subkey in uninstall_subkeys:
|
|
@@ -117,7 +119,8 @@ class Mumu12Host(HostProtocol):
|
|
|
117
119
|
creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP
|
|
118
120
|
)
|
|
119
121
|
if output.returncode != 0:
|
|
120
|
-
raise RuntimeError(f'Failed to invoke MuMuManager: {output.stderr}')
|
|
122
|
+
# raise RuntimeError(f'Failed to invoke MuMuManager: {output.stderr}')
|
|
123
|
+
logger.warning('Failed to invoke MuMuManager: %s', output.stderr)
|
|
121
124
|
return output.stdout
|
|
122
125
|
|
|
123
126
|
@staticmethod
|
|
@@ -127,9 +130,14 @@ class Mumu12Host(HostProtocol):
|
|
|
127
130
|
@staticmethod
|
|
128
131
|
def list() -> list[Instance]:
|
|
129
132
|
output = Mumu12Host._invoke_manager(['info', '-v', 'all'])
|
|
130
|
-
|
|
133
|
+
logger.debug('MuMuManager.exe output: %s', output)
|
|
134
|
+
|
|
131
135
|
try:
|
|
132
|
-
data: dict[str, dict[str, Any]] = json.loads(output)
|
|
136
|
+
data: dict[str, dict[str, Any]] = json.loads(output)
|
|
137
|
+
if 'name' in data.keys():
|
|
138
|
+
# 这里有个坑:
|
|
139
|
+
# 如果只有一个实例,返回的 JSON 结构是单个对象而不是数组
|
|
140
|
+
data = { '0': data }
|
|
133
141
|
instances = []
|
|
134
142
|
for index, instance_data in data.items():
|
|
135
143
|
instance = Mumu12Instance(
|
kotonebot/config/base_config.py
CHANGED
kotonebot/kaa/main/gr.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import os
|
|
2
|
+
import traceback
|
|
2
3
|
import zipfile
|
|
3
4
|
import logging
|
|
4
5
|
from functools import partial
|
|
@@ -442,29 +443,34 @@ class KotoneBotUI:
|
|
|
442
443
|
nonlocal current_tab
|
|
443
444
|
current_tab = selected_index
|
|
444
445
|
|
|
445
|
-
if selected_index == 3: # DMM
|
|
446
|
-
|
|
447
|
-
else: # Mumu, Leidian, Custom
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
if not
|
|
446
|
+
# if selected_index == 3: # DMM
|
|
447
|
+
# choices = ['windows', 'remote_windows']
|
|
448
|
+
# else: # Mumu, Leidian, Custom
|
|
449
|
+
# choices = ['adb', 'adb_raw', 'uiautomator2']
|
|
450
|
+
choices = ['adb', 'adb_raw', 'uiautomator2', 'windows', 'remote_windows']
|
|
451
|
+
if impl_value not in choices:
|
|
451
452
|
new_value = choices[0]
|
|
452
453
|
else:
|
|
453
454
|
new_value = impl_value
|
|
454
455
|
|
|
455
456
|
return gr.Dropdown(choices=choices, value=new_value)
|
|
456
457
|
|
|
457
|
-
with gr.Tabs(selected=self.current_config.backend.type)
|
|
458
|
+
with gr.Tabs(selected=self.current_config.backend.type):
|
|
458
459
|
with gr.Tab("MuMu 12", interactive=has_mumu12, id="mumu12") as tab_mumu12:
|
|
459
460
|
gr.Markdown("已选中 MuMu 12 模拟器")
|
|
460
461
|
if has_mumu12:
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
462
|
+
try:
|
|
463
|
+
instances = Mumu12Host.list()
|
|
464
|
+
mumu_instance = gr.Dropdown(
|
|
465
|
+
label="选择多开实例",
|
|
466
|
+
value=self.current_config.backend.instance_id,
|
|
467
|
+
choices=[(i.name, i.id) for i in instances],
|
|
468
|
+
interactive=True
|
|
469
|
+
)
|
|
470
|
+
except: # noqa: E722
|
|
471
|
+
logger.exception('Failed to list installed MuMu12')
|
|
472
|
+
gr.Markdown('获取 MuMu12 模拟器列表失败,请升级模拟器到最新版本。若问题依旧,前往 QQ 群、QQ 频道或 Github 反馈 bug。')
|
|
473
|
+
mumu_instance = gr.Dropdown(visible=False)
|
|
468
474
|
else:
|
|
469
475
|
# 为了让 return 收集组件时不报错
|
|
470
476
|
mumu_instance = gr.Dropdown(visible=False)
|
|
@@ -472,13 +478,18 @@ class KotoneBotUI:
|
|
|
472
478
|
with gr.Tab("雷电", interactive=has_leidian, id="leidian") as tab_leidian:
|
|
473
479
|
gr.Markdown("已选中雷电模拟器")
|
|
474
480
|
if has_leidian:
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
481
|
+
try:
|
|
482
|
+
instances = LeidianHost.list()
|
|
483
|
+
leidian_instance = gr.Dropdown(
|
|
484
|
+
label="选择多开实例",
|
|
485
|
+
value=self.current_config.backend.instance_id,
|
|
486
|
+
choices=[(i.name, i.id) for i in instances],
|
|
487
|
+
interactive=True
|
|
488
|
+
)
|
|
489
|
+
except: # noqa: E722
|
|
490
|
+
logger.exception('Failed to list installed Leidian')
|
|
491
|
+
gr.Markdown('获取雷电模拟器列表失败,请前往 QQ 群、QQ 频道或 Github 反馈 bug。')
|
|
492
|
+
leidian_instance = gr.Dropdown(visible=False)
|
|
482
493
|
else:
|
|
483
494
|
leidian_instance = gr.Dropdown(visible=False)
|
|
484
495
|
|
|
@@ -533,13 +544,14 @@ class KotoneBotUI:
|
|
|
533
544
|
with gr.Tab("DMM", id="dmm") as tab_dmm:
|
|
534
545
|
gr.Markdown("已选中 DMM")
|
|
535
546
|
|
|
536
|
-
type_in_config = self.current_config.backend.type
|
|
537
|
-
if type_in_config in ['dmm']:
|
|
538
|
-
|
|
539
|
-
elif type_in_config in ['mumu12', 'leidian', 'custom']:
|
|
540
|
-
|
|
541
|
-
else:
|
|
542
|
-
|
|
547
|
+
# type_in_config = self.current_config.backend.type
|
|
548
|
+
# if type_in_config in ['dmm']:
|
|
549
|
+
# choices = ['windows', 'remote_windows']
|
|
550
|
+
# elif type_in_config in ['mumu12', 'leidian', 'custom']:
|
|
551
|
+
# choices = ['adb', 'adb_raw', 'uiautomator2']
|
|
552
|
+
# else:
|
|
553
|
+
# raise ValueError(f'Unsupported backend type: {type_in_config}')
|
|
554
|
+
choices = ['adb', 'adb_raw', 'uiautomator2', 'windows', 'remote_windows']
|
|
543
555
|
screenshot_impl = gr.Dropdown(
|
|
544
556
|
choices=choices,
|
|
545
557
|
value=self.current_config.backend.screenshot_impl,
|
kotonebot/kaa/main/kaa.py
CHANGED
|
@@ -95,7 +95,7 @@ class Kaa(KotoneBot):
|
|
|
95
95
|
zipf.writestr('logs.txt', logs)
|
|
96
96
|
return path
|
|
97
97
|
except Exception as e:
|
|
98
|
-
logger.exception(
|
|
98
|
+
logger.exception('Failed to save error report:')
|
|
99
99
|
return ''
|
|
100
100
|
|
|
101
101
|
@override
|
|
@@ -114,12 +114,6 @@ class Kaa(KotoneBot):
|
|
|
114
114
|
logger.info('Checking backend...')
|
|
115
115
|
if config.backend.type == 'custom':
|
|
116
116
|
exe = config.backend.emulator_path
|
|
117
|
-
if exe is None:
|
|
118
|
-
user.error('「检查并启动模拟器」已开启但未配置「模拟器 exe 文件路径」。')
|
|
119
|
-
raise ValueError('Emulator executable path is not set.')
|
|
120
|
-
if not os.path.exists(exe):
|
|
121
|
-
user.error('「模拟器 exe 文件路径」对应的文件不存在!请检查路径是否正确。')
|
|
122
|
-
raise FileNotFoundError(f'Emulator executable not found: {exe}')
|
|
123
117
|
self.backend_instance = create_custom(
|
|
124
118
|
adb_ip=config.backend.adb_ip,
|
|
125
119
|
adb_port=config.backend.adb_port,
|
|
@@ -128,6 +122,12 @@ class Kaa(KotoneBot):
|
|
|
128
122
|
emulator_args=config.backend.emulator_args
|
|
129
123
|
)
|
|
130
124
|
if config.backend.check_emulator:
|
|
125
|
+
if exe is None:
|
|
126
|
+
user.error('「检查并启动模拟器」已开启但未配置「模拟器 exe 文件路径」。')
|
|
127
|
+
raise ValueError('Emulator executable path is not set.')
|
|
128
|
+
if not os.path.exists(exe):
|
|
129
|
+
user.error('「模拟器 exe 文件路径」对应的文件不存在!请检查路径是否正确。')
|
|
130
|
+
raise FileNotFoundError(f'Emulator executable not found: {exe}')
|
|
131
131
|
if not self.backend_instance.running():
|
|
132
132
|
logger.info('Starting custom backend...')
|
|
133
133
|
self.backend_instance.start()
|
kotonebot/kaa/metadata.py
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
WHATS_NEW = """
|
|
2
2
|
# 更新日志
|
|
3
3
|
## kaa
|
|
4
|
+
### v2025.5.23.2
|
|
5
|
+
脚本:
|
|
6
|
+
* [修复] 将配置项 adb_emulator_name 默认值置为 None(#f3ef360)
|
|
7
|
+
* [修复] 修复即使未勾选启动模拟器也会尝试启动的问题(#0641863)
|
|
8
|
+
|
|
9
|
+
界面:
|
|
10
|
+
* [修复] 修复截图方法 Dropdown 选项问题(#08a6b6f)
|
|
11
|
+
* [新增] 修改 MuMu 模拟器检测失败提示(#3358eb6)
|
|
12
|
+
|
|
13
|
+
### v2025.5.23.1
|
|
14
|
+
界面:
|
|
15
|
+
* [新增] 当检测模拟器扫描失败时避免整个程序崩溃(#3d47d3a)
|
|
16
|
+
|
|
17
|
+
框架:
|
|
18
|
+
* [修复] 修复 Mumu12Host 意外搜索了国际版 MuMu 导致异常的问题(#191d212)
|
|
19
|
+
* [修复] 修复当只存在单个多开实例时 MuMu12Host 报错(#cfd1f96)
|
|
20
|
+
|
|
4
21
|
### v2025.5.23.0
|
|
5
22
|
脚本:
|
|
6
23
|
* [修复] 修复 OCR 错误导致无法开始 MASTER 培育(#b4b14fa)
|