ksaa 2025.7.9.0__py3-none-any.whl → 2025.7.20.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 (145) hide show
  1. kotonebot/backend/context/context.py +4 -4
  2. kotonebot/errors.py +5 -1
  3. kotonebot/kaa/main/gr.py +131 -34
  4. kotonebot/kaa/main/kaa.py +3 -0
  5. kotonebot/kaa/metadata.py +26 -0
  6. kotonebot/kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
  7. kotonebot/kaa/resources/game.db +0 -0
  8. kotonebot/kaa/resources/game_ver.txt +0 -0
  9. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-012_0.png +0 -0
  10. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-012_1.png +0 -0
  11. kotonebot/kaa/tasks/R.py +126 -126
  12. kotonebot/kaa/tasks/daily/purchase.py +3 -2
  13. kotonebot/kaa/tasks/produce/in_purodyuusu.py +3 -3
  14. {ksaa-2025.7.9.0.dist-info → ksaa-2025.7.20.0.dist-info}/METADATA +1 -1
  15. {ksaa-2025.7.9.0.dist-info → ksaa-2025.7.20.0.dist-info}/RECORD +145 -143
  16. /kotonebot/kaa/sprites/{459851f5-fa20-45c4-a6d2-1018b3976fcd.png → 0002785c-3caa-4c8f-8d47-f29aee04a588.png} +0 -0
  17. /kotonebot/kaa/sprites/{d6d6229a-2345-4fe7-b2c5-109fcdb37c39.png → 04425af8-ba28-407d-ad18-8c3a2483025d.png} +0 -0
  18. /kotonebot/kaa/sprites/{443a5dbf-e2fb-4d34-bb09-c21e1437f715.png → 04feeecc-a607-402d-bbc4-a71af87c7fc2.png} +0 -0
  19. /kotonebot/kaa/sprites/{bdd0e8f8-3d35-48e8-b735-66eaf2ece2e6.png → 0554264f-0474-44d0-9209-8135d8840c53.png} +0 -0
  20. /kotonebot/kaa/sprites/{93f03304-5609-4f4f-9ac8-a46e7b883960.png → 05a23a4a-9b93-4fbd-b4e9-15a7c4a91fdc.png} +0 -0
  21. /kotonebot/kaa/sprites/{4ff46fa5-fe9e-4103-8012-451adc14dc43.png → 0a4c6cbe-f42e-4301-9c1a-101fc33421d2.png} +0 -0
  22. /kotonebot/kaa/sprites/{4f891dc4-71c0-4492-a8d1-0c52978e75e1.png → 0aa4472c-b533-46cc-a072-9d165d955424.png} +0 -0
  23. /kotonebot/kaa/sprites/{bc1c640a-87d8-47af-9fcc-8681acac7b27.png → 0e29489c-6728-46cd-bd13-2b9d9e74b2da.png} +0 -0
  24. /kotonebot/kaa/sprites/{7256a95e-24b8-40fd-bd8e-73a1572c3f93.png → 0e4b4481-6805-4a1b-a3d8-913681968662.png} +0 -0
  25. /kotonebot/kaa/sprites/{17d2730b-e56e-4956-973d-5f822490a2c5.png → 10a329df-2515-4551-a130-07e86058abdf.png} +0 -0
  26. /kotonebot/kaa/sprites/{133dbdd9-23fa-4157-9f9e-fd1728207bd0.png → 10d9a788-24a2-42e1-9284-78f507986606.png} +0 -0
  27. /kotonebot/kaa/sprites/{3c41fb45-6400-4818-9066-e03d60d2a895.png → 12151e09-e5f1-4b1d-a211-63cb300cb082.png} +0 -0
  28. /kotonebot/kaa/sprites/{585c7846-f353-448f-8eb9-1ceafec94555.png → 12d0271c-1a86-4d2c-b379-b7df847fe20b.png} +0 -0
  29. /kotonebot/kaa/sprites/{c1274e01-2cc7-432f-b244-65ffe8269656.png → 131fb7e1-6eb9-4722-9943-76ff05c5baee.png} +0 -0
  30. /kotonebot/kaa/sprites/{f496a454-5cf5-4b6b-aedb-1dad58c85035.png → 143db8eb-fdde-4de0-a946-a14123b9262e.png} +0 -0
  31. /kotonebot/kaa/sprites/{e916a5ca-287c-4cbe-93ca-22b439c5ffab.png → 15fe6944-396c-467b-80db-476bbdf65a80.png} +0 -0
  32. /kotonebot/kaa/sprites/{3820d53e-5b87-4a35-9472-e90498225853.png → 1609d037-a3fc-485b-96c6-cf1790434c01.png} +0 -0
  33. /kotonebot/kaa/sprites/{314bc3ab-8c73-4517-ae7c-75d21ac61448.png → 1737a9e0-f8c4-416e-bbad-cb97a658ae9a.png} +0 -0
  34. /kotonebot/kaa/sprites/{4c235498-622f-4f74-9ebb-df3fcd3306ab.png → 183df82f-acea-4d40-87a8-18fc8ddab6d0.png} +0 -0
  35. /kotonebot/kaa/sprites/{86b3bab1-c5f6-48b2-b810-c3ec55c32314.png → 1aed664e-ceb3-4a1d-a338-df08dc8ebbd3.png} +0 -0
  36. /kotonebot/kaa/sprites/{bcf2f87a-de7f-4fb9-aa6c-0b4f6bff921e.png → 1bb92c94-af17-492e-9d22-393c12b7f346.png} +0 -0
  37. /kotonebot/kaa/sprites/{bec6c0cf-40f6-446d-85b3-c692d3322a51.png → 1f9f101b-2647-4d14-931e-7a8307495475.png} +0 -0
  38. /kotonebot/kaa/sprites/{e19c5f10-5f93-4431-9bf3-4f92512eab6e.png → 20733b9b-1df7-42af-ab55-3364e8623602.png} +0 -0
  39. /kotonebot/kaa/sprites/{d477e49c-37cc-4e71-a8e6-6633f044260a.png → 25f18ff9-dbae-4aed-87b4-c05ca6c4ebf4.png} +0 -0
  40. /kotonebot/kaa/sprites/{f165bf01-9e9d-4afb-87d9-4a26318140cf.png → 2bb9dbf7-6cb2-426a-a35c-7228a1320220.png} +0 -0
  41. /kotonebot/kaa/sprites/{ffaffa14-22dd-4397-8dc1-7b94fd4cf06b.png → 2cea06ca-99f6-4bc5-8dd0-2bba80b07b17.png} +0 -0
  42. /kotonebot/kaa/sprites/{06bb9a6e-1dbe-48db-91d7-51d9fc3ffcce.png → 2cff833f-10bd-478c-8760-99162c71e9e3.png} +0 -0
  43. /kotonebot/kaa/sprites/{bf19069d-e044-4f76-93f7-f2ecd3214e47.png → 2dab2877-c6c3-45d9-849f-fb2d79b7b74e.png} +0 -0
  44. /kotonebot/kaa/sprites/{d1e5672d-df91-4316-984c-48550c5d1931.png → 32907971-0e98-4adc-91b8-ac0308c11c3c.png} +0 -0
  45. /kotonebot/kaa/sprites/{5a87228a-ec5d-4ffc-951a-1454c9c03bdc.png → 3645c21a-acd8-4ec4-a286-d9031736342c.png} +0 -0
  46. /kotonebot/kaa/sprites/{ae146d94-5e69-4970-b175-d7c8c4f9a9cd.png → 377857a9-c37f-4a90-afa9-00c4ff7b24ae.png} +0 -0
  47. /kotonebot/kaa/sprites/{f6c3bd48-fe1e-4fe3-bf58-13422b5b4a99.png → 38c0ed08-5af3-4fca-a37f-27d66fd35a4c.png} +0 -0
  48. /kotonebot/kaa/sprites/{48ebb790-2310-436d-a31c-dba4db034cbc.png → 39f88061-a997-4a8a-b09e-4a2425f4a83a.png} +0 -0
  49. /kotonebot/kaa/sprites/{64938ad2-442f-41eb-a544-4d2611e8012f.png → 3a595ec9-d813-4c09-b8b8-be8f5da88faa.png} +0 -0
  50. /kotonebot/kaa/sprites/{f4227a80-f62d-4daf-83d0-c7b5500088ee.png → 3e34e821-ae69-49aa-9d04-bc34b3037cd5.png} +0 -0
  51. /kotonebot/kaa/sprites/{e353b4cb-ea6d-4fc4-91ec-c19582e9507c.png → 3e613561-8dbd-4094-9889-53f08541a716.png} +0 -0
  52. /kotonebot/kaa/sprites/{ed4a318e-f69a-4fb9-9853-9746f01c6015.png → 3fc47270-febf-492e-b8fc-0a9793bc0d56.png} +0 -0
  53. /kotonebot/kaa/sprites/{65223004-722e-4003-af09-c7769e8a7cb2.png → 401966c8-2095-4eef-b92a-764122de02d9.png} +0 -0
  54. /kotonebot/kaa/sprites/{a5c582f5-3627-44be-b574-a4e4287376e0.png → 40f04ad0-44c0-4913-89aa-bc466bfd6ace.png} +0 -0
  55. /kotonebot/kaa/sprites/{29119167-eb9c-4c35-9c63-9c9967f85163.png → 41f0e90a-a352-450c-a788-0303d038227a.png} +0 -0
  56. /kotonebot/kaa/sprites/{2b8385d8-ea7e-4675-9d16-57b905a18d90.png → 4622e955-7bb1-450d-a776-01543540fde3.png} +0 -0
  57. /kotonebot/kaa/sprites/{c67852a2-30a9-4fd6-a4c2-83870a658998.png → 487ae483-2787-4982-93b0-4847665683e9.png} +0 -0
  58. /kotonebot/kaa/sprites/{b6680d31-8552-4111-bc39-0867c06bf94a.png → 49ccf947-13a5-4839-8f85-d0fe40094e77.png} +0 -0
  59. /kotonebot/kaa/sprites/{9d86ab77-de0b-433d-9b0e-5aba283309a6.png → 562f176f-af1e-4352-aeed-62e362177f9f.png} +0 -0
  60. /kotonebot/kaa/sprites/{33e4e6c9-d245-4174-8303-04019ce20136.png → 5aef61f9-d616-42f2-ae8d-5c5a033231d3.png} +0 -0
  61. /kotonebot/kaa/sprites/{9eb202c8-c61a-4918-beb9-b0f03739b0b3.png → 5d3b3a20-89bb-4cf2-9973-25581c32e91c.png} +0 -0
  62. /kotonebot/kaa/sprites/{38e35291-2a94-4261-9b58-80d7b17165c9.png → 610ea09a-d623-428f-ac97-1b51dc5e9202.png} +0 -0
  63. /kotonebot/kaa/sprites/{e0555145-9446-4ebe-965b-f46b458e5681.png → 63cd694d-343e-468d-a53f-360c97f71ee6.png} +0 -0
  64. /kotonebot/kaa/sprites/{b6c637bf-5fdd-4e68-b4d8-b403bf611f3b.png → 64298c97-baac-48b9-be7d-cb14091aa3cb.png} +0 -0
  65. /kotonebot/kaa/sprites/{83c67f2a-0f73-4238-a5a8-8ebb839ed99a.png → 6582463d-b4fa-40a1-b771-664c7f71fe9c.png} +0 -0
  66. /kotonebot/kaa/sprites/{992473c3-df0a-4c72-8134-f2aac9e7b0f6.png → 67f00dd1-86c9-4a49-a37c-87879171a46a.png} +0 -0
  67. /kotonebot/kaa/sprites/{04be14b5-4169-4b3e-ab14-224db52c9a39.png → 681157d7-b37f-442f-b784-86fa9029ecdb.png} +0 -0
  68. /kotonebot/kaa/sprites/{a914da74-9752-42be-913b-86514eb4b589.png → 6ac4a3b5-66d2-4429-8cd1-945fbb48280c.png} +0 -0
  69. /kotonebot/kaa/sprites/{debc6a94-9bf1-46d7-b0b0-0c55cb367f12.png → 6cacdb8f-2ea3-4e3c-a124-b957b75ea427.png} +0 -0
  70. /kotonebot/kaa/sprites/{b9e19bda-3793-4cf4-928a-fc43642b32e6.png → 6e59d072-06f8-488f-a453-8ba60a05d691.png} +0 -0
  71. /kotonebot/kaa/sprites/{231b3e86-cfc5-4e08-803b-63ed680ab1ad.png → 70671b9e-9ebb-4dee-bc5a-dbcb70364adf.png} +0 -0
  72. /kotonebot/kaa/sprites/{872838c5-47c6-4f78-b105-0a72b5459f16.png → 71d6a37d-45df-456f-b673-d1e8b35ee619.png} +0 -0
  73. /kotonebot/kaa/sprites/{c705eece-67d8-4017-a4d9-a7f1337f67be.png → 731ed76d-6d6c-48b9-82c3-045cc1ecc419.png} +0 -0
  74. /kotonebot/kaa/sprites/{26dd326a-a6da-4350-8140-217e9d6a6109.png → 79226566-26e2-4c2f-8f6a-4e4deb9fa9ea.png} +0 -0
  75. /kotonebot/kaa/sprites/{e6554fee-c6fd-49ee-8c32-b4932fc701da.png → 7f4accdd-bd72-45e6-8469-692e27986486.png} +0 -0
  76. /kotonebot/kaa/sprites/{659a1775-7001-4add-96e9-292693a26b60.png → 83f9e9a0-54dd-4601-8e54-3091c2892e67.png} +0 -0
  77. /kotonebot/kaa/sprites/{b1878d2b-4908-4342-b395-864aafa5c54b.png → 87c7532f-2394-403e-a6d8-7a216043ec13.png} +0 -0
  78. /kotonebot/kaa/sprites/{cba7528d-ae17-4a37-b388-6f86e1a590f4.png → 88945ecf-9ac5-46dc-8af6-b21dbfded665.png} +0 -0
  79. /kotonebot/kaa/sprites/{784a91b2-4d24-461f-8bd3-2f02b9bc193f.png → 89d3c0a6-266e-486e-998d-ecd0d2536814.png} +0 -0
  80. /kotonebot/kaa/sprites/{02cf0df9-37d6-4387-b8eb-c92589264c2a.png → 8a2938ad-5657-4f66-8447-4bc7fa45b857.png} +0 -0
  81. /kotonebot/kaa/sprites/{f4af8fb2-6270-4b75-8b24-d0e49daebac1.png → 8e0964c4-6e34-43cb-a333-d60bceae7f11.png} +0 -0
  82. /kotonebot/kaa/sprites/{f2846992-402e-4f50-b74e-91d6f3b8994d.png → 8fb17c7f-778d-4cd5-8d2f-dbf21d264297.png} +0 -0
  83. /kotonebot/kaa/sprites/{de069910-6085-45a9-ba96-64bc7aeead77.png → 9169bf8e-5907-42e5-b102-47da3bf9a0b1.png} +0 -0
  84. /kotonebot/kaa/sprites/{5e27d1c5-cc3f-4aee-8d79-69c09206fa3d.png → 92a42da1-d8d2-4233-b6d0-5997a72f3d03.png} +0 -0
  85. /kotonebot/kaa/sprites/{0910c5f3-7f72-4385-967c-4bf226c9861b.png → 94021aa4-fb87-41e7-920a-988a360f8321.png} +0 -0
  86. /kotonebot/kaa/sprites/{b4905122-7d97-4561-a14a-b8a9a5cd9227.png → 9449ff36-7adb-42d5-b89d-bf9147d62811.png} +0 -0
  87. /kotonebot/kaa/sprites/{4f4e3cf3-b1d9-436b-9477-5f2244c20d6b.png → 951ae4be-40f3-4ccc-8578-77aca7f25eef.png} +0 -0
  88. /kotonebot/kaa/sprites/{131d5c1b-70b3-47d3-b6d6-318045629037.png → 966bcfd4-fefc-4704-907d-45bc6098d3f4.png} +0 -0
  89. /kotonebot/kaa/sprites/{46c520e7-7b97-43be-8cc2-21e478b5d844.png → 97a543a8-a859-4a1e-8e33-602f600db389.png} +0 -0
  90. /kotonebot/kaa/sprites/{b534423c-2024-4234-9886-f49e17dd96e7.png → 9a9d9398-15df-46ea-a247-04ba01f61603.png} +0 -0
  91. /kotonebot/kaa/sprites/{cc1767ec-77db-49ac-8c9e-f48d1fb7b071.png → 9b696383-10dd-4a35-8546-1ccdb8891373.png} +0 -0
  92. /kotonebot/kaa/sprites/{6eb959e1-ee64-4fa6-a20f-8ee4e51f2c6a.png → 9d80c1ef-0f42-4622-ab9a-bfcc077dace6.png} +0 -0
  93. /kotonebot/kaa/sprites/{3e9adf0f-f6c5-4d68-9667-97ea2f82bb51.png → 9dbc5d76-8c6a-4638-b0c2-eba79542ec58.png} +0 -0
  94. /kotonebot/kaa/sprites/{2cd2047f-91af-4632-8cb2-eb2fc4b4c808.png → 9dfa46c9-54ec-4dd7-8f2e-e1e66c1206f1.png} +0 -0
  95. /kotonebot/kaa/sprites/{d4b1e48b-bf9c-4f44-9ddb-3af8eb4ea464.png → 9e0492b7-3b66-48a2-b589-91e7fd16106d.png} +0 -0
  96. /kotonebot/kaa/sprites/{3ef649e7-c03a-40d1-9a76-653faaf799df.png → a009c9de-029e-4999-b728-e6877374325a.png} +0 -0
  97. /kotonebot/kaa/sprites/{c65d71af-ffb3-4992-b954-c59ae48615b8.png → a3384f38-334c-440a-ab06-405bad293bab.png} +0 -0
  98. /kotonebot/kaa/sprites/{0c4ee900-3e44-4e37-a199-32d66daa2025.png → a4553bb1-27b9-47c4-8f51-1cff2129df8e.png} +0 -0
  99. /kotonebot/kaa/sprites/{4867e835-c805-463e-9a53-1e677e3d140f.png → a514ce10-bff1-4aa0-9625-bf560dcb8be5.png} +0 -0
  100. /kotonebot/kaa/sprites/{77193249-7e2a-4652-ab6d-a463350ca226.png → a5d3efa4-ec3e-4637-835a-147af973bbf8.png} +0 -0
  101. /kotonebot/kaa/sprites/{08444afd-90d4-43ac-b3ee-128a5bdef4a2.png → a77c1724-eb8f-4a1a-8997-516deb75ae78.png} +0 -0
  102. /kotonebot/kaa/sprites/{4b8ebe86-7a0d-474a-abac-b4a45fda5e88.png → b169172d-8ce2-432a-bed6-1dfc30bcc95c.png} +0 -0
  103. /kotonebot/kaa/sprites/{97e96ecf-e51b-4a09-ab11-3c164196747f.png → b25627d6-3352-4fe8-93c2-b653efe104d4.png} +0 -0
  104. /kotonebot/kaa/sprites/{712e9223-4dd2-4ff6-887b-4182fd243d78.png → b66e13a1-636c-4478-9d72-7d200ff670a9.png} +0 -0
  105. /kotonebot/kaa/sprites/{540a64f4-8111-4df4-abfe-0e62e0f8c7af.png → b6f5243b-cfb4-42d2-b4eb-2fd1a9d33ab7.png} +0 -0
  106. /kotonebot/kaa/sprites/{02d4e179-912e-4e1f-ba7d-ea37fe87279e.png → bc01675d-453c-43f2-9075-f9567c8aa6f9.png} +0 -0
  107. /kotonebot/kaa/sprites/{34cce4b7-53fe-4ea2-82d8-d31fe7b9abcd.png → bcc433e0-8a4e-455f-b625-4583cea19c1c.png} +0 -0
  108. /kotonebot/kaa/sprites/{4f3d2710-5626-4471-9b21-cd01b8c542d1.png → be83e205-8ec5-452f-b42b-b98156516aa8.png} +0 -0
  109. /kotonebot/kaa/sprites/{d356fc84-a8c0-4d0f-a3ed-c7ff5ccd276c.png → c3562fef-44f7-43d2-a4e6-e7ee21f8bdc5.png} +0 -0
  110. /kotonebot/kaa/sprites/{bc25ed87-50a7-4aa8-b743-505450677b00.png → c5774fb4-be11-4b28-8f58-299ae8872cc1.png} +0 -0
  111. /kotonebot/kaa/sprites/{dea4c704-5739-423f-a15c-f31a4a93d64f.png → c577c19e-aa5d-4670-b44c-1c0b3d72451a.png} +0 -0
  112. /kotonebot/kaa/sprites/{0cfd52cc-1f38-4804-bc1f-8da9cc51d969.png → c92a2935-cf41-4f56-911a-bc40f122cbf3.png} +0 -0
  113. /kotonebot/kaa/sprites/{6a202eb6-dd41-4675-a840-99dde2b2efa4.png → cab0b1ff-b40a-42a8-b799-75e309b2dee3.png} +0 -0
  114. /kotonebot/kaa/sprites/{7098fbf7-b8cc-4933-bfec-12a2ac98e38c.png → d14633f5-9682-4b59-a4ef-e92a2d26d86b.png} +0 -0
  115. /kotonebot/kaa/sprites/{43226a61-3d61-4acb-afbb-812bf9e97843.png → d54fc8f5-e50d-45dd-b123-92414f93488c.png} +0 -0
  116. /kotonebot/kaa/sprites/{b26e3c78-a6be-4ad1-8992-c3245b1a6f9b.png → d56feb26-d560-423f-b5f8-dc06f7a3c8a1.png} +0 -0
  117. /kotonebot/kaa/sprites/{efe68984-8dbc-417e-924c-87c6860c58ef.png → d627ba81-9c86-4b53-9ab9-86c8748d8daa.png} +0 -0
  118. /kotonebot/kaa/sprites/{6626694b-1394-44af-b76b-791c5bb2428b.png → d6314592-b8a4-4025-9875-b135bf986cf7.png} +0 -0
  119. /kotonebot/kaa/sprites/{f60c40a1-750b-41ac-9d24-2d7ffce44166.png → d81b7022-5c81-4533-b949-7e9d75a5b8b4.png} +0 -0
  120. /kotonebot/kaa/sprites/{d953cdee-08b5-45fb-908b-2644220b0f07.png → d83f2631-b9d8-4fd6-ab1c-50b0a013f3f0.png} +0 -0
  121. /kotonebot/kaa/sprites/{037cb117-8521-4670-b3ec-ee0e260c1d62.png → dcc214f3-9707-4a2c-aaff-3834e6f12f0b.png} +0 -0
  122. /kotonebot/kaa/sprites/{d2d99405-7927-47fc-be4c-a7591b339a6c.png → dcc2da94-2c9d-4248-bce5-731651e391ae.png} +0 -0
  123. /kotonebot/kaa/sprites/{ce282e51-7067-4293-ad26-24dbba172a08.png → dd699396-5500-43ad-8470-cf7a8ba013ec.png} +0 -0
  124. /kotonebot/kaa/sprites/{6b2e887b-e113-4280-9779-6795c2782c58.png → ddae5592-adc3-4c36-bfdd-6c6d91823296.png} +0 -0
  125. /kotonebot/kaa/sprites/{ae57e1fb-c42f-4401-93a1-76d4591b5fad.png → df9d09c3-8f15-4caf-bb21-f69644fb4705.png} +0 -0
  126. /kotonebot/kaa/sprites/{b3a41d58-f375-4882-bebb-57f72322d016.png → e04331fe-d62e-4f77-953d-78515ee5686e.png} +0 -0
  127. /kotonebot/kaa/sprites/{0b332c2c-aa57-4f10-aa55-8e981f2e7c27.png → e075c8cb-7eef-47cf-b9fe-9e3d1bd98e85.png} +0 -0
  128. /kotonebot/kaa/sprites/{73f89439-c4e3-4263-8fa7-229cde98aa99.png → e281792b-000b-4048-afb7-e8bb0dbd88b3.png} +0 -0
  129. /kotonebot/kaa/sprites/{c86a3385-407e-40d5-b519-1927406d5b09.png → e36ec591-8bf5-4deb-9f28-3977576de931.png} +0 -0
  130. /kotonebot/kaa/sprites/{3ae6e096-42e4-4ac4-ad79-6f2529925c16.png → e4a92c92-0974-40e0-b488-16ea7a4c1a29.png} +0 -0
  131. /kotonebot/kaa/sprites/{5422d945-aa90-443e-bf79-f8ab93ec9411.png → e89c23b0-ca58-49d1-b439-967a4a4a431d.png} +0 -0
  132. /kotonebot/kaa/sprites/{5cc8ccda-2cf7-4956-b67d-15327bc75ed6.png → f0952cb2-dadb-4d9a-933e-cabcbf8850fb.png} +0 -0
  133. /kotonebot/kaa/sprites/{a4e02797-2c5d-4860-aaa4-c20c43be7500.png → f16d6f1e-b9ff-4cff-aed3-dd150caf8f07.png} +0 -0
  134. /kotonebot/kaa/sprites/{aacb651b-9a3d-42a1-9fc0-9187dc8cded7.png → f217d7cf-acf5-44eb-9f99-025bbcaea866.png} +0 -0
  135. /kotonebot/kaa/sprites/{5b14a452-ea54-4804-8ec0-3cd916cd8e88.png → f2d8a534-8afd-475c-ac20-738c7efffc90.png} +0 -0
  136. /kotonebot/kaa/sprites/{2569011c-3bad-416c-b358-ceaf313507e8.png → f543861e-c3d5-4bc9-a677-47f9e86918ea.png} +0 -0
  137. /kotonebot/kaa/sprites/{ca42ca0c-3829-4e43-88c9-db4939cfa982.png → f5727018-9a23-40de-840e-610d6e5dfa9d.png} +0 -0
  138. /kotonebot/kaa/sprites/{756ac796-ce43-4ddb-989e-13bf07cbe3b7.png → f58c3a84-60ea-415b-ac63-4b534dc8cb6c.png} +0 -0
  139. /kotonebot/kaa/sprites/{ed4a2db1-ab2e-4b36-8d6f-5b7961501475.png → fd77088d-652a-472e-9f84-dcc83d40a6bf.png} +0 -0
  140. /kotonebot/kaa/sprites/{74efd362-4cc1-4b9f-8032-e5bc45c2af5c.png → fda67b44-d46d-4789-89a3-0786c60987ab.png} +0 -0
  141. /kotonebot/kaa/sprites/{5399e464-1ee6-406b-acab-7826e30f3fd9.png → fef40be1-5b75-4023-9977-df46cd211a86.png} +0 -0
  142. {ksaa-2025.7.9.0.dist-info → ksaa-2025.7.20.0.dist-info}/WHEEL +0 -0
  143. {ksaa-2025.7.9.0.dist-info → ksaa-2025.7.20.0.dist-info}/entry_points.txt +0 -0
  144. {ksaa-2025.7.9.0.dist-info → ksaa-2025.7.20.0.dist-info}/licenses/LICENSE +0 -0
  145. {ksaa-2025.7.9.0.dist-info → ksaa-2025.7.20.0.dist-info}/top_level.txt +0 -0
@@ -50,7 +50,7 @@ from kotonebot.backend.ocr import (
50
50
  from kotonebot.config.manager import load_config, save_config
51
51
  from kotonebot.config.base_config import UserConfig
52
52
  from kotonebot.backend.core import Image, HintBox
53
- from kotonebot.errors import KotonebotWarning
53
+ from kotonebot.errors import ContextNotInitializedError, KotonebotWarning
54
54
  from kotonebot.backend.preprocessor import PreprocessorProtocol
55
55
  from kotonebot.primitives import Rect
56
56
 
@@ -719,14 +719,14 @@ class Forwarded:
719
719
  if name.startswith('_FORWARD_'):
720
720
  return object.__getattribute__(self, name)
721
721
  if self._FORWARD_getter is None:
722
- raise ValueError(f"Forwarded object {self._FORWARD_name} called before initialization.")
722
+ raise ContextNotInitializedError(f"Forwarded object {self._FORWARD_name} called before initialization.")
723
723
  return getattr(self._FORWARD_getter(), name)
724
724
 
725
725
  def __setattr__(self, name: str, value: Any):
726
726
  if name.startswith('_FORWARD_'):
727
727
  return object.__setattr__(self, name, value)
728
728
  if self._FORWARD_getter is None:
729
- raise ValueError(f"Forwarded object {self._FORWARD_name} called before initialization.")
729
+ raise ContextNotInitializedError(f"Forwarded object {self._FORWARD_name} called before initialization.")
730
730
  setattr(self._FORWARD_getter(), name, value)
731
731
 
732
732
 
@@ -974,7 +974,7 @@ def inject_context(
974
974
  ):
975
975
  global _c
976
976
  if _c is None:
977
- raise RuntimeError('Context not initialized')
977
+ raise ContextNotInitializedError('Context not initialized')
978
978
  _c.inject(device=device, ocr=ocr, image=image, color=color, vars=vars, debug=debug, config=config)
979
979
 
980
980
  class ManualContextManager:
kotonebot/errors.py CHANGED
@@ -30,4 +30,8 @@ class UnscalableResolutionError(KotonebotError):
30
30
  self.target_resolution = target_resolution
31
31
  self.screen_size = screen_size
32
32
  super().__init__(f'Cannot scale to target resolution {target_resolution}. '
33
- f'Screen size: {screen_size}')
33
+ f'Screen size: {screen_size}')
34
+
35
+ class ContextNotInitializedError(KotonebotError):
36
+ def __init__(self, msg: str = 'Context not initialized'):
37
+ super().__init__(msg)
kotonebot/kaa/main/gr.py CHANGED
@@ -16,11 +16,12 @@ import gradio as gr
16
16
 
17
17
  from kotonebot.kaa.main import Kaa
18
18
  from kotonebot.kaa.db import IdolCard
19
+ from kotonebot.backend.context.context import vars
20
+ from kotonebot.errors import ContextNotInitializedError
21
+ from kotonebot.client.host import Mumu12Host, LeidianHost
19
22
  from kotonebot.config.manager import load_config, save_config
20
23
  from kotonebot.config.base_config import UserConfig, BackendConfig
21
24
  from kotonebot.backend.context import task_registry, ContextStackVars
22
- from kotonebot.backend.context.context import vars
23
- from kotonebot.client.host import Mumu12Host, LeidianHost
24
25
  from kotonebot.kaa.config import (
25
26
  BaseConfig, APShopItems, CapsuleToysConfig, ClubRewardConfig, PurchaseConfig, ActivityFundsConfig,
26
27
  PresentsConfig, AssignmentConfig, ContestConfig, ProduceConfig,
@@ -180,6 +181,15 @@ def _save_bug_report(
180
181
  zipf.write(file_path, arcname)
181
182
  yield f"### 打包 log 文件:{arcname}"
182
183
 
184
+ # 打包 conf 文件夹
185
+ if os.path.exists('conf'):
186
+ for root, dirs, files in os.walk('conf'):
187
+ for file in files:
188
+ file_path = os.path.join(root, file)
189
+ arcname = os.path.join('conf', os.path.relpath(file_path, 'conf'))
190
+ zipf.write(file_path, arcname)
191
+ yield f"### 打包配置文件:{arcname}"
192
+
183
193
  # 写出版本号
184
194
  zipf.writestr('version.txt', version)
185
195
 
@@ -381,8 +391,8 @@ class KotoneBotUI:
381
391
  """获取暂停按钮的状态和交互性"""
382
392
  try:
383
393
  text = "恢复" if vars.flow.is_paused else "暂停"
384
- except ValueError:
385
- # ValueError: Forwarded object vars called before initialization.
394
+ except ContextNotInitializedError:
395
+ # ContextNotInitializedError: Forwarded object vars called before initialization.
386
396
  # TODO: vars.flow.is_paused 应该要可以在脚本正式启动前就能访问
387
397
  text = '未启动'
388
398
  # 如果正在停止过程中,禁用暂停按钮
@@ -408,7 +418,10 @@ class KotoneBotUI:
408
418
 
409
419
  # 重新加载 Context 中的配置数据
410
420
  from kotonebot.backend.context.context import config
411
- config.load()
421
+ try:
422
+ config.load()
423
+ except ContextNotInitializedError:
424
+ pass
412
425
 
413
426
  logger.info("配置已成功重新加载")
414
427
  return True
@@ -484,8 +497,8 @@ class KotoneBotUI:
484
497
  run_btn = gr.Button("启动", scale=2)
485
498
  pause_btn = gr.Button("暂停", scale=1)
486
499
 
487
- # 快速功能启停控制区域
488
- gr.Markdown("### 快速功能启停")
500
+ # 快速设置控制区域
501
+ gr.Markdown("### 快速设置")
489
502
  with gr.Row(elem_classes=["quick-controls-row"]):
490
503
  purchase_quick = gr.Checkbox(
491
504
  label="商店",
@@ -548,6 +561,20 @@ class KotoneBotUI:
548
561
  elem_classes=["quick-checkbox"]
549
562
  )
550
563
 
564
+ def _get_end_action_value() -> str:
565
+ if self.current_config.options.end_game.shutdown:
566
+ return "关机"
567
+ if self.current_config.options.end_game.hibernate:
568
+ return "休眠"
569
+ return "什么都不做"
570
+
571
+ end_action_dropdown = gr.Dropdown(
572
+ label="完成后:",
573
+ choices=["什么都不做", "关机", "休眠"],
574
+ value=_get_end_action_value(),
575
+ interactive=True
576
+ )
577
+
551
578
  if self._kaa.upgrade_msg:
552
579
  gr.Markdown('### 配置升级报告')
553
580
  gr.Markdown(self._kaa.upgrade_msg)
@@ -576,7 +603,7 @@ class KotoneBotUI:
576
603
  def on_pause_click(evt: gr.EventData) -> str:
577
604
  return self.toggle_pause()
578
605
 
579
- # 快速功能控制的事件处理函数
606
+ # 快速设置控制的事件处理函数
580
607
  def save_quick_setting(field_name: str, value: bool, display_name: str):
581
608
  """保存快速设置并立即应用"""
582
609
  try:
@@ -625,7 +652,7 @@ class KotoneBotUI:
625
652
  outputs=[pause_btn]
626
653
  )
627
654
 
628
- # 绑定快速功能控制的事件
655
+ # 绑定快速设置控制的事件
629
656
  purchase_quick.change(
630
657
  fn=lambda x: save_quick_setting('purchase', x, '商店'),
631
658
  inputs=[purchase_quick]
@@ -667,13 +694,42 @@ class KotoneBotUI:
667
694
  inputs=[upgrade_support_card_quick]
668
695
  )
669
696
 
697
+ # 处理完成后操作下拉框
698
+ def save_quick_end_action(action: str):
699
+ try:
700
+ if action == "关机":
701
+ self.current_config.options.end_game.shutdown = True
702
+ self.current_config.options.end_game.hibernate = False
703
+ elif action == "休眠":
704
+ self.current_config.options.end_game.shutdown = False
705
+ self.current_config.options.end_game.hibernate = True
706
+ else: # 什么都不做
707
+ self.current_config.options.end_game.shutdown = False
708
+ self.current_config.options.end_game.hibernate = False
709
+
710
+ save_config(self.config, "config.json")
711
+
712
+ # 尝试热重载配置
713
+ if self.reload_config():
714
+ gr.Success(f"✓ 完成后操作已设置为 {action}")
715
+ else:
716
+ gr.Warning("⚠ 设置已保存,但重新加载失败")
717
+ except Exception as e:
718
+ gr.Error(f"✗ 保存失败:{str(e)}")
719
+
720
+ end_action_dropdown.change(
721
+ fn=save_quick_end_action,
722
+ inputs=[end_action_dropdown]
723
+ )
724
+
670
725
  # 添加定时器,分别更新按钮状态和任务状态
671
726
  def update_run_button_status():
672
727
  text, interactive = self.get_button_status()
673
728
  return gr.Button(value=text, interactive=interactive)
674
729
 
675
730
  def update_quick_checkboxes():
676
- """更新快速功能控制的 checkbox 状态,确保与设置同步"""
731
+ """更新快速设置区域控件的状态,确保与设置同步"""
732
+ end_action_val = _get_end_action_value()
677
733
  return [
678
734
  gr.Checkbox(value=self.current_config.options.purchase.enabled),
679
735
  gr.Checkbox(value=self.current_config.options.assignment.enabled),
@@ -685,6 +741,7 @@ class KotoneBotUI:
685
741
  gr.Checkbox(value=self.current_config.options.presents.enabled),
686
742
  gr.Checkbox(value=self.current_config.options.capsule_toys.enabled),
687
743
  gr.Checkbox(value=self.current_config.options.upgrade_support_card.enabled),
744
+ gr.Dropdown(value=end_action_val),
688
745
  ]
689
746
 
690
747
  gr.Timer(1.0).tick(
@@ -700,7 +757,7 @@ class KotoneBotUI:
700
757
  outputs=[
701
758
  purchase_quick, assignment_quick, contest_quick, produce_quick,
702
759
  mission_reward_quick, club_reward_quick, activity_funds_quick, presents_quick,
703
- capsule_toys_quick, upgrade_support_card_quick
760
+ capsule_toys_quick, upgrade_support_card_quick, end_action_dropdown
704
761
  ]
705
762
  )
706
763
  gr.Timer(1.0).tick(
@@ -949,12 +1006,6 @@ class KotoneBotUI:
949
1006
  interactive=True
950
1007
  )
951
1008
 
952
- keep_screenshots = gr.Checkbox(
953
- label="保留截图数据",
954
- value=self.current_config.keep_screenshots,
955
- info=UserConfig.model_fields['keep_screenshots'].description,
956
- interactive=True
957
- )
958
1009
 
959
1010
  target_screenshot_interval = gr.Number(
960
1011
  label="最小截图间隔(秒)",
@@ -1019,14 +1070,12 @@ class KotoneBotUI:
1019
1070
  # Common settings for all backend types
1020
1071
  self.current_config.backend.screenshot_impl = data['screenshot_method']
1021
1072
  self.current_config.backend.target_screenshot_interval = data['target_screenshot_interval']
1022
- self.current_config.keep_screenshots = data['keep_screenshots'] # This is a UserConfig field
1023
1073
 
1024
1074
  return set_config, {
1025
1075
  'adb_ip': adb_ip,
1026
1076
  'adb_port': adb_port,
1027
- 'screenshot_method': screenshot_impl, # screenshot_impl is the component
1077
+ 'screenshot_method': screenshot_impl,
1028
1078
  'target_screenshot_interval': target_screenshot_interval,
1029
- 'keep_screenshots': keep_screenshots,
1030
1079
  'check_emulator': check_emulator,
1031
1080
  'emulator_path': emulator_path,
1032
1081
  'adb_emulator_name': adb_emulator_name,
@@ -1583,6 +1632,8 @@ class KotoneBotUI:
1583
1632
  gr.Group(visible=False), # memory_sets_group
1584
1633
  gr.Dropdown(visible=False), # memory_sets
1585
1634
  gr.Checkbox(visible=False), # auto_set_support
1635
+ gr.Group(visible=False), # support_card_sets_group
1636
+ gr.Dropdown(visible=False), # support_card_sets
1586
1637
  gr.Checkbox(visible=False), # use_pt_boost
1587
1638
  gr.Checkbox(visible=False), # use_note_boost
1588
1639
  gr.Checkbox(visible=False), # follow_producer
@@ -1642,12 +1693,15 @@ class KotoneBotUI:
1642
1693
  solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
1643
1694
 
1644
1695
  gr.Success("新培育方案创建成功")
1645
- # 根据是否有设置Tab的下拉框来决定返回值
1646
- updated_dropdown = gr.Dropdown(choices=solution_choices, value=new_solution.id)
1696
+
1697
+ # 更新培育 Tab 下拉框并保持设置 Tab 当前选中值
1698
+ updated_dropdown_produce = gr.Dropdown(choices=solution_choices, value=new_solution.id)
1647
1699
  if settings_dropdown is not None:
1648
- return [updated_dropdown, updated_dropdown]
1700
+ current_selected = self.current_config.options.produce.selected_solution_id
1701
+ updated_dropdown_settings = gr.Dropdown(choices=solution_choices, value=current_selected)
1702
+ return [updated_dropdown_produce, updated_dropdown_settings]
1649
1703
  else:
1650
- return updated_dropdown
1704
+ return updated_dropdown_produce
1651
1705
  except Exception as e:
1652
1706
  gr.Error(f"创建培育方案失败:{str(e)}")
1653
1707
  if settings_dropdown is not None:
@@ -1664,6 +1718,14 @@ class KotoneBotUI:
1664
1718
  else:
1665
1719
  return gr.Dropdown()
1666
1720
 
1721
+ # 若尝试删除当前正在使用的培育方案,则拒绝并提示
1722
+ if solution_id == self.current_config.options.produce.selected_solution_id:
1723
+ gr.Warning("不可删除选中方案。请先在设置中选择其他方案,保存后再删除此方案。")
1724
+ if settings_dropdown is not None:
1725
+ return [gr.Dropdown(), gr.Dropdown()]
1726
+ else:
1727
+ return gr.Dropdown()
1728
+
1667
1729
  try:
1668
1730
  solution_manager.delete(solution_id)
1669
1731
 
@@ -1672,8 +1734,12 @@ class KotoneBotUI:
1672
1734
  solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
1673
1735
 
1674
1736
  gr.Success("培育方案删除成功")
1675
- # 根据是否有设置Tab的下拉框来决定返回值
1676
- updated_dropdown = gr.Dropdown(choices=solution_choices, value=None)
1737
+ # 删除方案后,保持当前培育方案的选择不变
1738
+ current_selected = self.current_config.options.produce.selected_solution_id
1739
+ if current_selected not in [sol.id for sol in solutions]:
1740
+ current_selected = None # 已不存在
1741
+
1742
+ updated_dropdown = gr.Dropdown(choices=solution_choices, value=current_selected)
1677
1743
  if settings_dropdown is not None:
1678
1744
  return [updated_dropdown, updated_dropdown]
1679
1745
  else:
@@ -2153,6 +2219,37 @@ class KotoneBotUI:
2153
2219
  'expose_to_lan': expose_to_lan
2154
2220
  }
2155
2221
 
2222
+ def _create_debug_settings(self) -> ConfigBuilderReturnValue:
2223
+ """调试设置:仅在调试时使用"""
2224
+ with gr.Column():
2225
+ gr.Markdown("### 调试设置")
2226
+ gr.Markdown('<div style="color: red;">仅供调试使用。正常运行时务必关闭下面所有的选项。</div>')
2227
+
2228
+ keep_screenshots = gr.Checkbox(
2229
+ label="保留截图数据",
2230
+ value=self.current_config.keep_screenshots,
2231
+ info=UserConfig.model_fields['keep_screenshots'].description,
2232
+ interactive=True
2233
+ )
2234
+
2235
+ trace_recommend_card_detection = gr.Checkbox(
2236
+ label="跟踪推荐卡检测",
2237
+ value=self.current_config.options.trace.recommend_card_detection,
2238
+ info=TraceConfig.model_fields['recommend_card_detection'].description,
2239
+ interactive=True
2240
+ )
2241
+
2242
+ def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
2243
+ # 保留截图数据属于 UserConfig
2244
+ self.current_config.keep_screenshots = data['keep_screenshots']
2245
+ # 跟踪推荐卡检测属于 BaseConfig.trace
2246
+ config.trace.recommend_card_detection = data['trace_recommend_card_detection']
2247
+
2248
+ return set_config, {
2249
+ 'keep_screenshots': keep_screenshots,
2250
+ 'trace_recommend_card_detection': trace_recommend_card_detection
2251
+ }
2252
+
2156
2253
  def _create_settings_tab(self) -> None:
2157
2254
  with gr.Tab("设置"):
2158
2255
  gr.Markdown("## 设置")
@@ -2187,18 +2284,18 @@ class KotoneBotUI:
2187
2284
  # 升级支援卡设置
2188
2285
  capsule_toys_settings = self._create_capsule_toys_settings()
2189
2286
 
2190
- # 跟踪设置
2191
- trace_settings = self._create_trace_settings()
2192
-
2193
- # 杂项设置
2194
- misc_settings = self._create_misc_settings()
2195
-
2196
2287
  # 启动游戏设置
2197
2288
  start_game_settings = self._create_start_game_settings()
2198
2289
 
2199
2290
  # 关闭游戏设置
2200
2291
  end_game_settings = self._create_end_game_settings()
2201
2292
 
2293
+ # 杂项设置
2294
+ misc_settings = self._create_misc_settings()
2295
+
2296
+ # 调试设置(放在最后)
2297
+ debug_settings = self._create_debug_settings()
2298
+
2202
2299
  save_btn = gr.Button("保存设置")
2203
2300
  result = gr.Markdown()
2204
2301
 
@@ -2216,8 +2313,8 @@ class KotoneBotUI:
2216
2313
  capsule_toys_settings,
2217
2314
  start_game_settings,
2218
2315
  end_game_settings,
2219
- trace_settings,
2220
- misc_settings
2316
+ misc_settings,
2317
+ debug_settings
2221
2318
  ] # list of (set_func, { 'key': component, ... })
2222
2319
  all_components = [list(ret[1].values()) for ret in all_return_values] # [[c1, c2], [c3], ...]
2223
2320
  all_components = list(chain(*all_components)) # [c1, c2, c3, ...]
kotonebot/kaa/main/kaa.py CHANGED
@@ -1,5 +1,6 @@
1
1
  import io
2
2
  import os
3
+ import sys
3
4
  from typing import Any, Literal, cast
4
5
  import zipfile
5
6
  import logging
@@ -60,6 +61,8 @@ class Kaa(KotoneBot):
60
61
  self.upgrade_msg = upgrade_msg
61
62
  self.version = importlib.metadata.version('ksaa')
62
63
  logger.info('Version: %s', self.version)
64
+ logger.info('Python Version: %s', sys.version)
65
+ logger.info('Python Executable: %s', sys.executable)
63
66
 
64
67
  def add_file_logger(self, log_path: str):
65
68
  log_dir = os.path.abspath(os.path.dirname(log_path))
kotonebot/kaa/metadata.py CHANGED
@@ -1,6 +1,32 @@
1
1
  WHATS_NEW = """
2
2
  # 更新日志
3
3
  ## kaa
4
+ ### v2025.7.20.0
5
+ 脚本:
6
+ * [修复] 修复商店购买中购买推荐商品时点击推荐标签不生效的问题(#b07d4d3)
7
+ * [修复] 修复 DMM 上由于输出分辨率到日志中导致的启动失败问题(#4deea1d)
8
+ * [修复] 修复严格模式下长时间卡在四张卡的推荐卡检测上(#acfb554)
9
+
10
+ 界面:
11
+ * [修复] 修复新建培育方案时会自动修改当前选中的方案的问题(#3e67627)
12
+ * [修复] 修复删除培育时的报错问题(#1b385c0)
13
+ * [新增] 将保留截图数据与跟踪推荐卡两个选项统一移动到调试设置中(#f929046)
14
+ * [新增] 首页快速功能区域新增完成后操作(#b8ade2f)
15
+
16
+ ### v2025.7.13.0
17
+ 脚本:
18
+ * [新增] 上传报告时一并打包配置文件(#a8a5566)
19
+
20
+ 界面:
21
+ * [修复] 修复某些情况下热重载配置失败的问题(#4bea422)
22
+
23
+ 启动器:
24
+ * [修复] 修复当文件夹路径存在空格时启动器无法正确启动 kaa 的问题(#63f792d)
25
+ * [新增] 启动器 EXE 新增多分辨率图标(#5db3ed6)
26
+
27
+ 其他:
28
+ * [其他] 增加对 Python 信息与分辨率信息的日志输出(#5cc9f45)
29
+
4
30
  ### v2025.7.9.0
5
31
  脚本:
6
32
  * [新增] 配置中支持储存多个培育方案并支持来回切换(#41e7c8b)
Binary file
Binary file