ksaa 2025.6.28.0__py3-none-any.whl → 2025.7.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. kotonebot/kaa/common.py +18 -0
  2. kotonebot/kaa/main/gr.py +259 -6
  3. kotonebot/kaa/metadata.py +10 -0
  4. kotonebot/kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
  5. kotonebot/kaa/resources/game.db +0 -0
  6. kotonebot/kaa/resources/game_ver.txt +0 -0
  7. kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-3-005_0.png +0 -0
  8. kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-3-005_1.png +0 -0
  9. kotonebot/kaa/tasks/R.py +132 -132
  10. {ksaa-2025.6.28.0.dist-info → ksaa-2025.7.3.0.dist-info}/METADATA +1 -1
  11. {ksaa-2025.6.28.0.dist-info → ksaa-2025.7.3.0.dist-info}/RECORD +147 -145
  12. /kotonebot/kaa/sprites/{36d71d33-09c9-4be8-b184-ccf40f700333.png → 01ce8957-465d-4278-b297-f58b36c73285.png} +0 -0
  13. /kotonebot/kaa/sprites/{b003bef5-53db-4032-b1bd-d5075de365a8.png → 02048c24-3002-4122-b24b-15a2c2fb502f.png} +0 -0
  14. /kotonebot/kaa/sprites/{671b4a55-023a-434d-b29a-e844fe528e6b.png → 02de663b-a039-4530-b10b-fd5aea9f600e.png} +0 -0
  15. /kotonebot/kaa/sprites/{da7a329e-339e-4ee7-8775-bca505a1980d.png → 047454d6-9cbb-432d-b670-bde2d5f5fc9a.png} +0 -0
  16. /kotonebot/kaa/sprites/{35319890-98e3-4f75-b969-6b8576ef668d.png → 081ca89e-0f95-45e5-a855-5b7e49295af5.png} +0 -0
  17. /kotonebot/kaa/sprites/{64be274e-e8ad-4938-84c1-5d8aabcd10d8.png → 0a0dfcba-7ae4-415a-9361-7f3c4ec16ef9.png} +0 -0
  18. /kotonebot/kaa/sprites/{469c2b41-4171-4902-acc5-da0c807886ab.png → 0a586241-e005-45a6-b12f-eed8089d8fd8.png} +0 -0
  19. /kotonebot/kaa/sprites/{81526e97-1b8d-433f-a5c9-907e4e8c85cd.png → 0ad61c60-5458-400d-9788-437edb32608a.png} +0 -0
  20. /kotonebot/kaa/sprites/{5f0c2a57-efd0-4094-9f71-6f6fe97316f6.png → 0b452661-3720-4fa3-9e52-6fdc69517396.png} +0 -0
  21. /kotonebot/kaa/sprites/{55e4ef75-ba8e-4230-819c-450cf14b08cd.png → 0db398fd-3551-4a15-b734-ca5a7b54150f.png} +0 -0
  22. /kotonebot/kaa/sprites/{4d355e36-9169-43e4-bd58-2836ee3e56e0.png → 0e0686c7-9fe8-4f82-9d05-7922e55fc1a9.png} +0 -0
  23. /kotonebot/kaa/sprites/{9e369992-ea8c-4c15-88d3-1344319978b0.png → 109ff896-1f96-465a-ad6f-ef410789e140.png} +0 -0
  24. /kotonebot/kaa/sprites/{998fc84a-af71-4fa5-8aa4-e0bfeb9c53ea.png → 1140cce1-90e4-44cd-9acc-c2491841fbd4.png} +0 -0
  25. /kotonebot/kaa/sprites/{019273c4-22ce-486f-8a7d-dbc78f13dcac.png → 124fb25f-47ac-468d-97af-f90c9604f1c5.png} +0 -0
  26. /kotonebot/kaa/sprites/{c9d3699b-c8b1-4294-9b48-103df4ab6c65.png → 1470cd16-3340-4a0a-854f-3acf9b882cb1.png} +0 -0
  27. /kotonebot/kaa/sprites/{9f9003ba-468f-406f-a82f-1b7a23ef347c.png → 156d67bb-562c-42df-b55a-aea0b6ad71dd.png} +0 -0
  28. /kotonebot/kaa/sprites/{aacd229c-d307-4a20-a388-84d8f4afb4a5.png → 17608ef8-fe7c-4fc7-b811-a6c05e838881.png} +0 -0
  29. /kotonebot/kaa/sprites/{379d5084-637f-45e8-8bd8-789eaa919821.png → 1a4c5291-70a9-4923-aadf-f7e6a28c7aa5.png} +0 -0
  30. /kotonebot/kaa/sprites/{b641a122-4734-43e1-b22f-468464a0cff1.png → 1db583b2-c82a-4576-9ca9-b7409bc1ca95.png} +0 -0
  31. /kotonebot/kaa/sprites/{554c0ff6-0a05-419d-85f9-5ced260d0d2e.png → 1fc998a7-cfa2-4485-9742-1ae87306a9fc.png} +0 -0
  32. /kotonebot/kaa/sprites/{dedb8499-5881-4add-914f-ff0049285dae.png → 24cdb395-915e-4816-9406-efd1aafa70c1.png} +0 -0
  33. /kotonebot/kaa/sprites/{0f6d7f89-bdb2-4235-9b6b-e65cb73a4167.png → 25151748-2eb2-4f08-94f1-f1be2fbea3da.png} +0 -0
  34. /kotonebot/kaa/sprites/{7a9d1c39-b306-4cb0-be2f-7a5963099949.png → 25598023-8999-4737-9f3c-9da71bb88748.png} +0 -0
  35. /kotonebot/kaa/sprites/{c90b582c-8570-48b4-98c0-62d5b067ca2c.png → 26b9efc1-51be-4784-bf78-2b929abac650.png} +0 -0
  36. /kotonebot/kaa/sprites/{dff74cce-ba2d-44aa-b924-183259080a32.png → 276522a3-d8f0-4b0f-8ee5-dce3f2cb87a5.png} +0 -0
  37. /kotonebot/kaa/sprites/{fa80b14e-953f-44bd-a4ad-99aefd276fd7.png → 277035b5-7eee-4ca8-80dd-f73d78e7531f.png} +0 -0
  38. /kotonebot/kaa/sprites/{75a2093d-8743-427e-8d24-ae9a69fa14c1.png → 28ea2cc9-e9f2-4573-968a-0c88562c696a.png} +0 -0
  39. /kotonebot/kaa/sprites/{618b21ad-ab8b-436a-8eb8-bd320a198c9f.png → 28f44641-894d-4047-bc56-b932ac5a32a0.png} +0 -0
  40. /kotonebot/kaa/sprites/{a546e254-0490-43df-a291-a9a5c2b4c34a.png → 2a0e9656-26ba-4d7a-a414-6045e521b92c.png} +0 -0
  41. /kotonebot/kaa/sprites/{49b9a298-e847-4322-99a2-c0588c3542fe.png → 2a2770d2-7fd8-4bb0-89a7-c507046fc892.png} +0 -0
  42. /kotonebot/kaa/sprites/{9dcca89b-c92b-4708-8f19-facd40d09a65.png → 2b9fb35b-4a3b-440d-bcac-1eb1fdfe0e21.png} +0 -0
  43. /kotonebot/kaa/sprites/{eb8d208a-dbcc-43ca-a8ac-098e1005ebfa.png → 2fc3fa82-cc3d-4164-839f-d0bd7f8a32f5.png} +0 -0
  44. /kotonebot/kaa/sprites/{ffda716c-2903-4ec7-8c59-aab5b8ad10bb.png → 2fd135e1-8010-4a53-90a3-2a950c5a43bf.png} +0 -0
  45. /kotonebot/kaa/sprites/{20b01af5-907b-4d49-9f5b-a3700ca9c0c3.png → 3037118b-4a82-4cfc-ad95-db8a03f779d5.png} +0 -0
  46. /kotonebot/kaa/sprites/{e46e1b6d-6702-46bf-a07e-aec8d183453f.png → 33aaec9e-dccc-441a-b91a-4784f1eb4498.png} +0 -0
  47. /kotonebot/kaa/sprites/{613e9b10-b2eb-44ea-b6d9-9310c0e1bdcf.png → 359e43b3-6b85-4f8c-86a1-4d4c1ae75779.png} +0 -0
  48. /kotonebot/kaa/sprites/{818e2370-8fb9-4e6c-ab78-58e86d6525b5.png → 3a4e2e77-c49b-4f69-bfd1-19fbe4f5c9a5.png} +0 -0
  49. /kotonebot/kaa/sprites/{9ce7d48e-295d-47b2-96eb-f3ce697c1b37.png → 3bf0a104-739e-4bef-9304-4aa77e5e18ea.png} +0 -0
  50. /kotonebot/kaa/sprites/{3f5907a9-7fe4-4f46-8e46-a96ac7fa3923.png → 3ea8a020-5605-47ce-8d3a-d812d0583058.png} +0 -0
  51. /kotonebot/kaa/sprites/{15f8f31e-65ce-408d-8556-b799bcefc9d4.png → 404c6271-1af4-4f63-be02-e82b318eb072.png} +0 -0
  52. /kotonebot/kaa/sprites/{86b15801-c932-4034-bed8-fd76b0f65916.png → 43550662-cd46-4312-b18b-949cba98d173.png} +0 -0
  53. /kotonebot/kaa/sprites/{5d6c4462-3d7c-42eb-ab3e-195ebf845a09.png → 441c2df2-43ac-4ff3-814e-6230c510bce6.png} +0 -0
  54. /kotonebot/kaa/sprites/{08946997-4e9e-4242-95e1-e988fa96b919.png → 44430184-c35e-4bb8-8858-ed5cec580c36.png} +0 -0
  55. /kotonebot/kaa/sprites/{fe35655e-701b-4081-8df8-c17a7252acef.png → 4466c3fe-a5ad-4960-a137-0d735441b12e.png} +0 -0
  56. /kotonebot/kaa/sprites/{78b642d3-9a2c-4c17-8872-3cc78211f4a0.png → 46debd92-df4c-49d6-a3f6-c83a4c72be70.png} +0 -0
  57. /kotonebot/kaa/sprites/{d19c37ff-d5c1-4316-8424-e69ccb5c2523.png → 49e46cda-a6ac-44c8-8901-60956ca5151d.png} +0 -0
  58. /kotonebot/kaa/sprites/{06ea773b-e2b3-40d4-82f6-b119ce9ca00b.png → 4cca8c07-b33f-4f57-8c2b-3fff8cb4424a.png} +0 -0
  59. /kotonebot/kaa/sprites/{8669ce44-dec7-47c2-aafd-3f2fbfd1d083.png → 4fe4fbf2-4dbf-44d2-8dd6-a3f3c9f0d1b7.png} +0 -0
  60. /kotonebot/kaa/sprites/{61a09df6-7443-436c-9ef0-1d5a1cae1509.png → 501eaf11-021e-4764-93ed-0be6ea0ed5df.png} +0 -0
  61. /kotonebot/kaa/sprites/{ef2ad3df-3f89-4a48-8fc3-c70a8adc1044.png → 525b6f3a-acc8-4bd8-be4b-cc1f44fb377a.png} +0 -0
  62. /kotonebot/kaa/sprites/{e23e3f19-03f6-4507-9128-115191272b90.png → 540547f7-5633-440c-b7ad-b54529436479.png} +0 -0
  63. /kotonebot/kaa/sprites/{40c0f296-d29e-4e05-aaff-a212339b742e.png → 540a0d73-7158-4872-808f-abcb11ba1aef.png} +0 -0
  64. /kotonebot/kaa/sprites/{4a1902aa-01db-46bb-bea5-88ac62c82562.png → 559485ee-a27f-4824-ad7a-e57d0c613ed5.png} +0 -0
  65. /kotonebot/kaa/sprites/{c39f2006-442b-4ab7-99bb-3dfa0673f05d.png → 56a7aed8-6367-40dd-a6a1-fc8a840abd9b.png} +0 -0
  66. /kotonebot/kaa/sprites/{f1fac13a-84f3-42bd-9b52-e0ba90bc5255.png → 5d8bbe9f-4732-495a-8d27-80cfd2ea12f5.png} +0 -0
  67. /kotonebot/kaa/sprites/{5d5cb13b-c1fd-4808-b352-b21291a9ff0b.png → 612d508d-e77c-492e-854d-30141733bd27.png} +0 -0
  68. /kotonebot/kaa/sprites/{610348f2-6262-4cd1-8fc3-e7470f85580c.png → 62031705-40e0-4b74-b7b9-07f1fffd122f.png} +0 -0
  69. /kotonebot/kaa/sprites/{8431cc52-0041-4425-808c-dcd4d196506c.png → 62a4c9fd-35e6-4982-b9f4-e3a5685eac13.png} +0 -0
  70. /kotonebot/kaa/sprites/{f05e410d-15b8-4831-bcc1-4cd8af07c882.png → 685fb958-ec13-4826-8e78-3575ff42df27.png} +0 -0
  71. /kotonebot/kaa/sprites/{81399fd9-f254-4d0e-9775-ad451c237a4e.png → 689aa894-304a-48d2-8b6e-794dc967b1f6.png} +0 -0
  72. /kotonebot/kaa/sprites/{0f40352f-6443-406e-8e2c-c40d5cfc6c59.png → 69266fc9-c8fe-48ea-8d68-8ace8c606049.png} +0 -0
  73. /kotonebot/kaa/sprites/{5a393483-c631-47fd-805c-c460c23b8f9e.png → 699df701-37a2-4e17-afae-5b49ab826926.png} +0 -0
  74. /kotonebot/kaa/sprites/{5b75cae4-a853-402c-acec-edbfef94342a.png → 6a7eacf1-f14e-45cf-8ef7-7f933d4fa664.png} +0 -0
  75. /kotonebot/kaa/sprites/{4eb97d68-cd47-4100-9c3b-35b5c86b4bdf.png → 6af19ba1-ca74-473b-8788-61132e5fc084.png} +0 -0
  76. /kotonebot/kaa/sprites/{893b015d-6894-4e74-880e-d22859a25662.png → 6be05914-aa45-4e55-a0bb-7ec16e76d7b1.png} +0 -0
  77. /kotonebot/kaa/sprites/{bd7a6754-fffc-4315-987f-5ba32d95b697.png → 6f342de5-b179-4120-ab6d-404c3eee5caa.png} +0 -0
  78. /kotonebot/kaa/sprites/{c7e3736a-0e0f-474a-9386-f58292a45b92.png → 6fc5543e-9d09-4f06-8331-64ee62bd73c3.png} +0 -0
  79. /kotonebot/kaa/sprites/{5dc2dca3-48bd-4eee-af89-1a1d30593bd5.png → 7036c80b-28fd-4a54-a8f9-06a23d89e861.png} +0 -0
  80. /kotonebot/kaa/sprites/{9cbf7f6e-fe77-463b-9c60-495dc823510a.png → 71fe9437-3d7a-4321-9e5c-d6b81d954002.png} +0 -0
  81. /kotonebot/kaa/sprites/{d26bf52c-cb1b-4ebf-9c03-ff3f2d245959.png → 7344f9d8-fccb-44e3-ab43-a180cfce2217.png} +0 -0
  82. /kotonebot/kaa/sprites/{e2eb3bae-6451-40b9-bbff-90f11dca1904.png → 74e207b4-a13e-47cc-bf23-dbf77089ea3c.png} +0 -0
  83. /kotonebot/kaa/sprites/{242c088b-bc73-4d11-aa31-ee7c71477fb4.png → 76aca556-0042-4f84-a29a-30e6a631aa72.png} +0 -0
  84. /kotonebot/kaa/sprites/{76bde19a-4b1b-4e52-86d9-f56be7529c71.png → 7aa7c3dc-02e8-4d70-a026-d1afb34f37f9.png} +0 -0
  85. /kotonebot/kaa/sprites/{ebe4ce64-98a9-40f2-9fde-3d5cdae673c7.png → 7d4d40cf-a6db-41ef-90fd-2fb0a6f5087d.png} +0 -0
  86. /kotonebot/kaa/sprites/{54a15298-ecaf-4cc5-b8a2-5b0d8f8add41.png → 7d7ccd61-8d92-49b4-aa7e-b1e73906371e.png} +0 -0
  87. /kotonebot/kaa/sprites/{e5297036-9934-44a4-a761-a6a49ae06e3e.png → 807904aa-30fd-4a9b-8acb-ca4b235281bc.png} +0 -0
  88. /kotonebot/kaa/sprites/{4b7c4221-a679-47f6-929d-0ef514894b27.png → 81a6e258-670c-4646-90ef-a76846cf5d37.png} +0 -0
  89. /kotonebot/kaa/sprites/{f7c34ab6-c165-48b7-ad5a-0b60613ce1bc.png → 81bf65f2-9cc3-4613-9611-e7b5ec14c31c.png} +0 -0
  90. /kotonebot/kaa/sprites/{15191dec-7e33-4721-8068-15c11978e885.png → 84af97ac-7e73-4ae8-88a6-9b3a18c81fbe.png} +0 -0
  91. /kotonebot/kaa/sprites/{3031397e-3d12-4f23-8377-006eca5d2627.png → 85347bb8-c28d-4a40-bd55-386c530727c2.png} +0 -0
  92. /kotonebot/kaa/sprites/{d696062b-9b58-4af1-835e-2cf5a0a0fbeb.png → 884a25c2-7b98-4a33-a975-6f918a8301aa.png} +0 -0
  93. /kotonebot/kaa/sprites/{3851303a-e3a0-46eb-aa7e-b47fb41946f7.png → 88ed3d25-070a-411d-b4fb-8a9df068b091.png} +0 -0
  94. /kotonebot/kaa/sprites/{77d06f4d-8214-4306-9dc5-035c720f7256.png → 94b8429e-64d9-49da-945c-d2d3dcccb587.png} +0 -0
  95. /kotonebot/kaa/sprites/{fe853ac7-934e-4b4a-bcc7-b986e057dfcf.png → 95e591bb-f0e6-457e-83e3-0909cb5c8877.png} +0 -0
  96. /kotonebot/kaa/sprites/{51a3ed29-92b9-4429-9e50-783d1b8dc6a7.png → 982d2e5d-4493-44a5-b922-e71649fd6bc5.png} +0 -0
  97. /kotonebot/kaa/sprites/{6e5e9cf9-80b0-4241-a222-ff50dbd89a0c.png → 99ae067f-72f2-4d13-a2de-f78ce13ec5a3.png} +0 -0
  98. /kotonebot/kaa/sprites/{8c0fa5fa-cebb-4ae7-bd1c-b542c9cbf694.png → 9b425fee-9118-4015-9242-29bf1150e704.png} +0 -0
  99. /kotonebot/kaa/sprites/{52d3438b-afae-4c7a-abe5-7ed530c7558c.png → 9bf5d8a8-30c1-4ce7-9888-bcada63d48e6.png} +0 -0
  100. /kotonebot/kaa/sprites/{2f2a7951-a30a-4835-b9f6-3205cfdd2f05.png → 9fb0b19e-ae0c-4c9e-8ec8-b126113b6091.png} +0 -0
  101. /kotonebot/kaa/sprites/{49a43af3-17e3-4434-ba4d-519775ccaea9.png → a241cff0-d803-4c8f-bcd0-22bda2adc8a7.png} +0 -0
  102. /kotonebot/kaa/sprites/{bc7303f3-43e9-4ece-9206-5f9c779b813b.png → a26dc021-2a28-4f79-bd11-48c4a1261f0d.png} +0 -0
  103. /kotonebot/kaa/sprites/{d26b60f7-d15c-4563-bedc-dd6e7e4078b2.png → a2ab29ef-ddc7-4885-9f88-850858b0c995.png} +0 -0
  104. /kotonebot/kaa/sprites/{cc9483c3-c895-4dcc-b3f2-0934ba1ad42e.png → a388f87d-9a69-4189-b80a-e230d7d7b964.png} +0 -0
  105. /kotonebot/kaa/sprites/{dedea21b-f21d-4621-a213-70ad03faec58.png → a53820f6-1572-413a-b7b1-2bc08690884f.png} +0 -0
  106. /kotonebot/kaa/sprites/{5c9ae62c-488f-4109-a4d2-d2385c32043d.png → a5bd802e-d10c-4e95-9b62-1ffd92aca4ab.png} +0 -0
  107. /kotonebot/kaa/sprites/{e0246b0d-f0cf-49d4-8423-7da46e75a575.png → a6d63930-bb09-443c-95ae-47ad6a9f9cc4.png} +0 -0
  108. /kotonebot/kaa/sprites/{540ee3b5-ca8f-4091-80a6-ce774d95e5f7.png → ab4cd19c-ad2b-4ed7-baeb-eef6a12939b2.png} +0 -0
  109. /kotonebot/kaa/sprites/{6ef59649-bbb3-42b6-a6b0-eac4f35a3da4.png → abd7bfbf-5f08-452a-b216-22fb0af4e955.png} +0 -0
  110. /kotonebot/kaa/sprites/{913a1d17-54fe-4c8f-ac50-ef7f39600b86.png → ac4579ad-2000-4283-8e13-53fe525725bf.png} +0 -0
  111. /kotonebot/kaa/sprites/{cec49286-3d48-4fe0-8911-6a1b17d1ac20.png → ada79928-ea1a-4537-89e7-a02877dc6e7d.png} +0 -0
  112. /kotonebot/kaa/sprites/{e1b6b32b-c797-4f1d-aa2b-e7320083a9a6.png → af4b7a1d-4cb2-432c-8dbb-c333950c58c2.png} +0 -0
  113. /kotonebot/kaa/sprites/{5d94e628-82ff-4531-b70a-b13297491bea.png → b5d02984-ec1f-48f5-8593-0bc0e4babc1f.png} +0 -0
  114. /kotonebot/kaa/sprites/{3d1aa368-e198-478f-a47f-49818efbaec8.png → bba69e83-b9f4-4a24-a95b-190c985c5b22.png} +0 -0
  115. /kotonebot/kaa/sprites/{a2bf4e11-fbc3-4172-bc0b-b16f8f59e68c.png → bc10fc41-960e-4151-aad2-325367b20895.png} +0 -0
  116. /kotonebot/kaa/sprites/{4a96a728-6303-4ae3-8e0c-9f1e8e5f86a7.png → bc94b664-bbcf-4b59-8e4b-7dbf03997309.png} +0 -0
  117. /kotonebot/kaa/sprites/{03e34ef7-36b5-4ddc-9545-5b70a2eba72e.png → bf44c221-0af9-497e-a2e8-cdc497348257.png} +0 -0
  118. /kotonebot/kaa/sprites/{d5fd6c73-4ad8-47b5-89be-c7b137a9950f.png → bff85e9a-df48-429f-a82e-ceff41f8527b.png} +0 -0
  119. /kotonebot/kaa/sprites/{312dbd82-5457-474a-91ce-511f0e4e9c80.png → c4985caa-1e42-4980-9a76-a660a7b12c67.png} +0 -0
  120. /kotonebot/kaa/sprites/{3536f829-70d3-48f9-8fd4-b65eab7502f3.png → c5447438-3b41-465e-b438-157f5e61c764.png} +0 -0
  121. /kotonebot/kaa/sprites/{d06fd859-4678-4593-b096-c86b38810cb7.png → c696843a-1e17-4c0d-a92c-eb54f9356daf.png} +0 -0
  122. /kotonebot/kaa/sprites/{31851ad1-df39-4a4f-9ae7-19c1d1c6b51a.png → cc959ce4-8619-4bd7-8a85-02f97cf6cc51.png} +0 -0
  123. /kotonebot/kaa/sprites/{497e7930-f423-457a-8168-b1a1532bb1e9.png → ce0df3fa-5d88-4b20-9cf1-6b4abac4c110.png} +0 -0
  124. /kotonebot/kaa/sprites/{860c3d98-e263-482f-95fb-4fc9c472e8b8.png → d2a8f04f-38c1-4a67-8c57-43e0334887ef.png} +0 -0
  125. /kotonebot/kaa/sprites/{0769f8f4-1c47-4bad-a783-bba5e20250bf.png → db375f07-c682-4aae-880a-a2cf13d0dac0.png} +0 -0
  126. /kotonebot/kaa/sprites/{964c6b90-f526-4199-9523-d8124373a56b.png → dd4c523c-1286-4f68-89f5-371464aa138c.png} +0 -0
  127. /kotonebot/kaa/sprites/{0d60ce10-20ce-4980-8172-b6bac08d6258.png → e2d3a8c0-3998-4643-b084-c21b2304843c.png} +0 -0
  128. /kotonebot/kaa/sprites/{fff33200-c947-49f2-ab86-3ac98937fa36.png → e3c1f79a-0077-43db-bd00-ba04d7ca8d3b.png} +0 -0
  129. /kotonebot/kaa/sprites/{e7da5988-0e83-44ad-888b-246365473f9e.png → e47acec2-3466-419a-acad-30618239aab9.png} +0 -0
  130. /kotonebot/kaa/sprites/{5cdd71be-c8cd-4310-b6f4-5e97ddbeb46e.png → e671d7bd-cf40-425f-b941-3e1adf4624e8.png} +0 -0
  131. /kotonebot/kaa/sprites/{14d09c44-3897-4c81-b615-19c35d0f3793.png → e703f139-9612-4e4a-be30-db32423d57d9.png} +0 -0
  132. /kotonebot/kaa/sprites/{5824ef5f-6776-402c-b78c-ae79cc4cc878.png → e89906b2-7354-4724-80ef-7c7fe5cd3ef5.png} +0 -0
  133. /kotonebot/kaa/sprites/{85a49ff3-6075-4797-8b7f-35851a843698.png → ea0440b1-a7a5-4db0-828a-f907b0531cd5.png} +0 -0
  134. /kotonebot/kaa/sprites/{cef78712-d9ae-4d6e-8d7d-d047d48fbb98.png → ecdf7c70-d50e-41f4-a2ee-c4f6dd5a2617.png} +0 -0
  135. /kotonebot/kaa/sprites/{43e72796-a644-4d9b-a817-8add011d9a75.png → ed331876-f724-4a9f-a494-7823be883a76.png} +0 -0
  136. /kotonebot/kaa/sprites/{c774098e-d782-455c-80a9-5bad3713129d.png → ee7f4e24-6cbc-41ed-9327-d6843ac6a820.png} +0 -0
  137. /kotonebot/kaa/sprites/{7ddda828-c8b0-4331-864f-99b85b7c5557.png → f1758956-6b88-49f7-9ecf-44db49d1e6fe.png} +0 -0
  138. /kotonebot/kaa/sprites/{c70f4634-6821-4480-a615-b5f9cdc578c1.png → f6063ed7-f59e-4c37-93e2-026c805826ea.png} +0 -0
  139. /kotonebot/kaa/sprites/{97c281a9-ebb0-4f54-b644-b7ed7dd65f81.png → f699ed29-e7aa-4c53-8320-3df785078ec3.png} +0 -0
  140. /kotonebot/kaa/sprites/{515a2ff0-36b8-4f2f-9902-e6c1b9796586.png → f897b52f-b9d8-4d94-9d98-1ed6bf7b6c76.png} +0 -0
  141. /kotonebot/kaa/sprites/{86062e91-d6c1-44cf-9f8c-26a8b9dd8686.png → f92f9af7-77ef-4814-a64b-ce8f340a9cf9.png} +0 -0
  142. /kotonebot/kaa/sprites/{338b699a-d556-4b80-a577-123442c3db45.png → fccea764-f5db-45c6-ace1-140844e0d0f0.png} +0 -0
  143. /kotonebot/kaa/sprites/{35516b69-a4f4-4ad4-8af4-35043475ee90.png → feb8f473-8a2e-40a5-b6e0-dffafd35edc1.png} +0 -0
  144. {ksaa-2025.6.28.0.dist-info → ksaa-2025.7.3.0.dist-info}/WHEEL +0 -0
  145. {ksaa-2025.6.28.0.dist-info → ksaa-2025.7.3.0.dist-info}/entry_points.txt +0 -0
  146. {ksaa-2025.6.28.0.dist-info → ksaa-2025.7.3.0.dist-info}/licenses/LICENSE +0 -0
  147. {ksaa-2025.6.28.0.dist-info → ksaa-2025.7.3.0.dist-info}/top_level.txt +0 -0
kotonebot/kaa/common.py CHANGED
@@ -461,6 +461,21 @@ class EndGameConfig(ConfigBaseModel):
461
461
  (目前仅对 DMM 版有效。)
462
462
  """
463
463
 
464
+ class MiscConfig(ConfigBaseModel):
465
+ check_update: Literal['never', 'startup'] = 'startup'
466
+ """
467
+ 检查更新时机。
468
+
469
+ * never: 从不检查更新。
470
+ * startup: 启动时检查更新。
471
+ """
472
+ auto_install_update: bool = True
473
+ """
474
+ 是否自动安装更新。
475
+
476
+ 若启用,则每次自动检查更新时若有新版本会自动安装,否则只是会提示。
477
+ """
478
+
464
479
  class BaseConfig(ConfigBaseModel):
465
480
  purchase: PurchaseConfig = PurchaseConfig()
466
481
  """商店购买配置"""
@@ -501,6 +516,9 @@ class BaseConfig(ConfigBaseModel):
501
516
  end_game: EndGameConfig = EndGameConfig()
502
517
  """关闭游戏配置"""
503
518
 
519
+ misc: MiscConfig = MiscConfig()
520
+ """杂项配置"""
521
+
504
522
 
505
523
  def conf() -> BaseConfig:
506
524
  """获取当前配置数据"""
kotonebot/kaa/main/gr.py CHANGED
@@ -3,6 +3,9 @@ import traceback
3
3
  import zipfile
4
4
  import logging
5
5
  import copy
6
+ import sys
7
+ import subprocess
8
+ import json
6
9
  from functools import partial
7
10
  from itertools import chain
8
11
  from datetime import datetime, timedelta
@@ -22,7 +25,7 @@ from kotonebot.kaa.common import (
22
25
  BaseConfig, APShopItems, CapsuleToysConfig, ClubRewardConfig, PurchaseConfig, ActivityFundsConfig,
23
26
  PresentsConfig, AssignmentConfig, ContestConfig, ProduceConfig,
24
27
  MissionRewardConfig, DailyMoneyShopItems, ProduceAction,
25
- RecommendCardDetectionMode, TraceConfig, StartGameConfig, EndGameConfig, UpgradeSupportCardConfig,
28
+ RecommendCardDetectionMode, TraceConfig, StartGameConfig, EndGameConfig, UpgradeSupportCardConfig, MiscConfig,
26
29
  )
27
30
 
28
31
  logger = logging.getLogger(__name__)
@@ -88,6 +91,9 @@ ConfigKey = Literal[
88
91
  'presents_enabled',
89
92
  'trace_recommend_card_detection',
90
93
 
94
+ # misc
95
+ 'check_update', 'auto_install_update',
96
+
91
97
  '_selected_backend_index'
92
98
 
93
99
  ]
@@ -1469,6 +1475,35 @@ class KotoneBotUI:
1469
1475
  'trace_recommend_card_detection': trace_recommend_card_detection
1470
1476
  }
1471
1477
 
1478
+ def _create_misc_settings(self) -> ConfigBuilderReturnValue:
1479
+ with gr.Column():
1480
+ gr.Markdown("### 杂项设置")
1481
+ check_update = gr.Dropdown(
1482
+ choices=[
1483
+ ("启动时检查更新", "startup"),
1484
+ ("从不检查更新", "never")
1485
+ ],
1486
+ value=self.current_config.options.misc.check_update,
1487
+ label="检查更新时机",
1488
+ info=MiscConfig.model_fields['check_update'].description,
1489
+ interactive=True
1490
+ )
1491
+ auto_install_update = gr.Checkbox(
1492
+ label="自动安装更新",
1493
+ value=self.current_config.options.misc.auto_install_update,
1494
+ info=MiscConfig.model_fields['auto_install_update'].description,
1495
+ interactive=True
1496
+ )
1497
+
1498
+ def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
1499
+ config.misc.check_update = data['check_update']
1500
+ config.misc.auto_install_update = data['auto_install_update']
1501
+
1502
+ return set_config, {
1503
+ 'check_update': check_update,
1504
+ 'auto_install_update': auto_install_update
1505
+ }
1506
+
1472
1507
  def _create_settings_tab(self) -> None:
1473
1508
  with gr.Tab("设置"):
1474
1509
  gr.Markdown("## 设置")
@@ -1506,6 +1541,9 @@ class KotoneBotUI:
1506
1541
  # 跟踪设置
1507
1542
  trace_settings = self._create_trace_settings()
1508
1543
 
1544
+ # 杂项设置
1545
+ misc_settings = self._create_misc_settings()
1546
+
1509
1547
  # 启动游戏设置
1510
1548
  start_game_settings = self._create_start_game_settings()
1511
1549
 
@@ -1529,7 +1567,8 @@ class KotoneBotUI:
1529
1567
  capsule_toys_settings,
1530
1568
  start_game_settings,
1531
1569
  end_game_settings,
1532
- trace_settings
1570
+ trace_settings,
1571
+ misc_settings
1533
1572
  ] # list of (set_func, { 'key': component, ... })
1534
1573
  all_components = [list(ret[1].values()) for ret in all_return_values] # [[c1, c2], [c3], ...]
1535
1574
  all_components = list(chain(*all_components)) # [c1, c2, c3, ...]
@@ -1571,10 +1610,224 @@ class KotoneBotUI:
1571
1610
  )
1572
1611
 
1573
1612
  def _create_whats_new_tab(self) -> None:
1574
- """创建更新日志标签页,并显示最新版本更新内容"""
1575
- with gr.Tab("更新日志"):
1576
- from kotonebot.kaa.metadata import WHATS_NEW
1577
- gr.Markdown(WHATS_NEW)
1613
+ """创建更新标签页"""
1614
+ with gr.Tab("更新"):
1615
+ gr.Markdown("## 版本管理")
1616
+
1617
+ # 更新日志
1618
+ with gr.Accordion("更新日志", open=False):
1619
+ from kotonebot.kaa.metadata import WHATS_NEW
1620
+ gr.Markdown(WHATS_NEW)
1621
+
1622
+ # 载入信息按钮
1623
+ load_info_btn = gr.Button("载入信息", variant="primary")
1624
+
1625
+ # 状态信息
1626
+ status_text = gr.Markdown("")
1627
+
1628
+ # 版本选择下拉框(用于安装)
1629
+ version_dropdown = gr.Dropdown(
1630
+ label="选择要安装的版本",
1631
+ choices=[],
1632
+ value=None,
1633
+ visible=False,
1634
+ interactive=True
1635
+ )
1636
+
1637
+ # 安装选定版本按钮
1638
+ install_selected_btn = gr.Button("安装选定版本", visible=False)
1639
+
1640
+ def list_all_versions():
1641
+ """列出所有可用版本"""
1642
+ import logging
1643
+ logger = logging.getLogger(__name__)
1644
+
1645
+ try:
1646
+ # 构建命令,使用清华镜像源
1647
+ cmd = [
1648
+ sys.executable, "-m", "pip", "index", "versions", "ksaa", "--json",
1649
+ "--index-url", "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple",
1650
+ "--trusted-host", "mirrors.tuna.tsinghua.edu.cn"
1651
+ ]
1652
+ logger.info(f"执行命令: {' '.join(cmd)}")
1653
+
1654
+ # 使用 pip index versions --json 来获取版本信息
1655
+ result = subprocess.run(
1656
+ cmd,
1657
+ capture_output=True,
1658
+ text=True,
1659
+ timeout=30
1660
+ )
1661
+
1662
+ logger.info(f"命令返回码: {result.returncode}")
1663
+ if result.stdout:
1664
+ logger.info(f"命令输出: {result.stdout[:500]}...") # 只记录前500字符
1665
+ if result.stderr:
1666
+ logger.warning(f"命令错误输出: {result.stderr}")
1667
+
1668
+ if result.returncode != 0:
1669
+ error_msg = f"获取版本列表失败: {result.stderr}"
1670
+ logger.error(error_msg)
1671
+ return (
1672
+ error_msg,
1673
+ gr.Button(value="载入信息", interactive=True),
1674
+ gr.Dropdown(visible=False),
1675
+ gr.Button(visible=False)
1676
+ )
1677
+
1678
+ # 解析 JSON 输出
1679
+ try:
1680
+ data = json.loads(result.stdout)
1681
+ versions = data.get("versions", [])
1682
+ latest_version = data.get("latest", "")
1683
+ installed_version = data.get("installed_version", "")
1684
+
1685
+ logger.info(f"解析到 {len(versions)} 个版本")
1686
+ logger.info(f"最新版本: {latest_version}")
1687
+ logger.info(f"已安装版本: {installed_version}")
1688
+
1689
+ except json.JSONDecodeError as e:
1690
+ error_msg = f"解析版本信息失败: {str(e)}"
1691
+ logger.error(error_msg)
1692
+ return (
1693
+ error_msg,
1694
+ gr.Button(value="载入信息", interactive=True),
1695
+ gr.Dropdown(visible=False),
1696
+ gr.Button(visible=False)
1697
+ )
1698
+
1699
+ if not versions:
1700
+ error_msg = "未找到可用版本"
1701
+ logger.warning(error_msg)
1702
+ return (
1703
+ error_msg,
1704
+ gr.Button(value="载入信息", interactive=True),
1705
+ gr.Dropdown(visible=False),
1706
+ gr.Button(visible=False)
1707
+ )
1708
+
1709
+ # 构建状态信息
1710
+ status_info = []
1711
+ if installed_version:
1712
+ status_info.append(f"**当前安装版本:** {installed_version}")
1713
+ if latest_version:
1714
+ status_info.append(f"**最新版本:** {latest_version}")
1715
+ status_info.append(f"**找到 {len(versions)} 个可用版本**")
1716
+
1717
+ status_message = "\n\n".join(status_info)
1718
+ logger.info(f"版本信息载入完成: {status_message}")
1719
+
1720
+ # 返回更新后的组件
1721
+ return (
1722
+ status_message,
1723
+ gr.Button(value="载入信息", interactive=True),
1724
+ gr.Dropdown(choices=versions, value=versions[0] if versions else None, visible=True, label="选择要安装的版本"),
1725
+ gr.Button(visible=True, value="安装选定版本")
1726
+ )
1727
+
1728
+ except subprocess.TimeoutExpired:
1729
+ error_msg = "获取版本列表超时"
1730
+ logger.error(error_msg)
1731
+ return (
1732
+ error_msg,
1733
+ gr.Button(value="载入信息", interactive=True),
1734
+ gr.Dropdown(visible=False),
1735
+ gr.Button(visible=False)
1736
+ )
1737
+ except Exception as e:
1738
+ error_msg = f"获取版本列表失败: {str(e)}"
1739
+ logger.error(error_msg)
1740
+ return (
1741
+ error_msg,
1742
+ gr.Button(value="载入信息", interactive=True),
1743
+ gr.Dropdown(visible=False),
1744
+ gr.Button(visible=False)
1745
+ )
1746
+
1747
+ def install_selected_version(selected_version: str):
1748
+ """安装选定的版本"""
1749
+ import logging
1750
+ import threading
1751
+ import time
1752
+ logger = logging.getLogger(__name__)
1753
+
1754
+ if not selected_version:
1755
+ error_msg = "请先选择一个版本"
1756
+ logger.warning(error_msg)
1757
+ return error_msg
1758
+
1759
+ def install_and_exit():
1760
+ """在后台线程中执行安装并退出程序"""
1761
+ try:
1762
+ # 等待一小段时间确保UI响应已返回
1763
+ time.sleep(1)
1764
+
1765
+ # 构建启动器命令
1766
+ bootstrap_path = os.path.join(os.getcwd(), "bootstrap.pyz")
1767
+ cmd = [sys.executable, bootstrap_path, f"--install-version={selected_version}"]
1768
+ logger.info(f"开始通过启动器安装版本 {selected_version}")
1769
+ logger.info(f"执行命令: {' '.join(cmd)}")
1770
+
1771
+ # 启动启动器进程(不等待完成)
1772
+ subprocess.Popen(
1773
+ cmd,
1774
+ cwd=os.getcwd(),
1775
+ creationflags=subprocess.CREATE_NEW_CONSOLE if os.name == 'nt' else 0
1776
+ )
1777
+
1778
+ # 等待一小段时间确保启动器启动
1779
+ time.sleep(2)
1780
+
1781
+ # 退出当前程序
1782
+ logger.info("安装即将开始,正在退出当前程序...")
1783
+ os._exit(0)
1784
+
1785
+ except Exception as e:
1786
+ raise
1787
+
1788
+ try:
1789
+ # 在后台线程中执行安装和退出
1790
+ install_thread = threading.Thread(target=install_and_exit, daemon=True)
1791
+ install_thread.start()
1792
+
1793
+ return f"正在启动器中安装版本 {selected_version},程序将自动重启..."
1794
+
1795
+ except Exception as e:
1796
+ error_msg = f"启动安装进程失败: {str(e)}"
1797
+ logger.error(error_msg)
1798
+ return error_msg
1799
+
1800
+ def load_info_with_button_state():
1801
+ """载入信息并管理按钮状态"""
1802
+ import logging
1803
+ logger = logging.getLogger(__name__)
1804
+
1805
+ logger.info("开始载入版本信息")
1806
+
1807
+ # 先禁用按钮
1808
+ yield (
1809
+ "正在载入版本信息...",
1810
+ gr.Button(value="载入中...", interactive=False),
1811
+ gr.Dropdown(visible=False),
1812
+ gr.Button(visible=False)
1813
+ )
1814
+
1815
+ # 执行载入操作
1816
+ result = list_all_versions()
1817
+ logger.info("版本信息载入操作完成")
1818
+ yield result
1819
+
1820
+ # 绑定事件
1821
+ load_info_btn.click(
1822
+ fn=load_info_with_button_state,
1823
+ outputs=[status_text, load_info_btn, version_dropdown, install_selected_btn]
1824
+ )
1825
+
1826
+ install_selected_btn.click(
1827
+ fn=install_selected_version,
1828
+ inputs=[version_dropdown],
1829
+ outputs=[status_text]
1830
+ )
1578
1831
 
1579
1832
  def _create_screen_tab(self) -> None:
1580
1833
  with gr.Tab("画面"):
kotonebot/kaa/metadata.py CHANGED
@@ -1,6 +1,16 @@
1
1
  WHATS_NEW = """
2
2
  # 更新日志
3
3
  ## kaa
4
+ ### v2025.7.3.0
5
+ 启动器:
6
+ * [新增] 新启动器现在支持安装指定版本与指定补丁(#456019b)
7
+ * [新增] 自动更新可禁用(#3f88c3a)
8
+ * [新增] 启动器 C++ EXE 跳板程序(#b377b84)
9
+ * [新增] 新启动器(#c4b93f4)
10
+
11
+ 其他:
12
+ * [其他] Git 记录提取工具支持 bootstrap scope(#66ea531)
13
+
4
14
  ### v2025.6.28.0
5
15
  脚本:
6
16
  * [修复] 修正 debug_entry 脚本路径处理逻辑(#b53a055)
Binary file
Binary file