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