ksaa 2025.8.23.1__py3-none-any.whl → 2025.9__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 (827) hide show
  1. {kotonebot/kaa → kaa}/application/core/idle_mode.py +1 -1
  2. {kotonebot/kaa → kaa}/application/core/misc_core.py +1 -1
  3. {kotonebot/kaa → kaa}/common.py +2 -2
  4. {kotonebot/kaa → kaa}/config/const.py +1 -1
  5. {kotonebot/kaa → kaa}/config/produce.py +1 -1
  6. {kotonebot/kaa → kaa}/config/schema.py +10 -1
  7. kaa/db/drink.py +84 -0
  8. kaa/db/sqlite.py +42 -0
  9. {kotonebot → kaa}/debug_entry.py +3 -3
  10. {kotonebot/kaa → kaa}/errors.py +14 -0
  11. {kotonebot/kaa → kaa}/game_ui/dialog.py +1 -1
  12. kaa/game_ui/drinks_overview.py +174 -0
  13. {kotonebot/kaa → kaa}/game_ui/idols_overview.py +13 -7
  14. {kotonebot/kaa → kaa}/game_ui/schedule.py +2 -2
  15. {kotonebot/kaa → kaa}/game_ui/scrollable.py +4 -3
  16. {kotonebot/kaa → kaa}/image_db/db.py +24 -4
  17. {kotonebot/kaa → kaa}/main/gr.py +489 -110
  18. {kotonebot/kaa → kaa}/main/kaa.py +11 -2
  19. {kotonebot/kaa → kaa}/metadata.py +135 -0
  20. kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
  21. kaa/resources/drinks/img_general_pdrink_1-001.png +0 -0
  22. kaa/resources/drinks/img_general_pdrink_1-002.png +0 -0
  23. kaa/resources/drinks/img_general_pdrink_1-003.png +0 -0
  24. kaa/resources/drinks/img_general_pdrink_1-004.png +0 -0
  25. kaa/resources/drinks/img_general_pdrink_1-006.png +0 -0
  26. kaa/resources/drinks/img_general_pdrink_1-008.png +0 -0
  27. kaa/resources/drinks/img_general_pdrink_1-009.png +0 -0
  28. kaa/resources/drinks/img_general_pdrink_1-010.png +0 -0
  29. kaa/resources/drinks/img_general_pdrink_2-001.png +0 -0
  30. kaa/resources/drinks/img_general_pdrink_2-003.png +0 -0
  31. kaa/resources/drinks/img_general_pdrink_2-004.png +0 -0
  32. kaa/resources/drinks/img_general_pdrink_2-005.png +0 -0
  33. kaa/resources/drinks/img_general_pdrink_2-006.png +0 -0
  34. kaa/resources/drinks/img_general_pdrink_2-007.png +0 -0
  35. kaa/resources/drinks/img_general_pdrink_2-008.png +0 -0
  36. kaa/resources/drinks/img_general_pdrink_2-009.png +0 -0
  37. kaa/resources/drinks/img_general_pdrink_2-010.png +0 -0
  38. kaa/resources/drinks/img_general_pdrink_3-001.png +0 -0
  39. kaa/resources/drinks/img_general_pdrink_3-002.png +0 -0
  40. kaa/resources/drinks/img_general_pdrink_3-004.png +0 -0
  41. kaa/resources/drinks/img_general_pdrink_3-005.png +0 -0
  42. kaa/resources/drinks/img_general_pdrink_3-006.png +0 -0
  43. kaa/resources/drinks/img_general_pdrink_3-007.png +0 -0
  44. kaa/resources/drinks/img_general_pdrink_3-008.png +0 -0
  45. kaa/resources/drinks/img_general_pdrink_3-009.png +0 -0
  46. kaa/resources/drinks/img_general_pdrink_3-010.png +0 -0
  47. kaa/resources/drinks/img_general_pdrink_3-011.png +0 -0
  48. kaa/resources/drinks/img_general_pdrink_3-012.png +0 -0
  49. kaa/resources/drinks/img_general_pdrink_3-013.png +0 -0
  50. {kotonebot/kaa → kaa}/resources/game.db +0 -0
  51. kaa/resources/game_ver.txt +0 -0
  52. kaa/resources/idol_cards/i_card-skin-amao-3-014_0.png +0 -0
  53. kaa/resources/idol_cards/i_card-skin-amao-3-014_1.png +0 -0
  54. kaa/resources/idol_cards/i_card-skin-fktn-3-014_0.png +0 -0
  55. kaa/resources/idol_cards/i_card-skin-fktn-3-016_0.png +0 -0
  56. kaa/resources/idol_cards/i_card-skin-fktn-3-016_1.png +0 -0
  57. kaa/resources/idol_cards/i_card-skin-hmsz-3-013_0.png +0 -0
  58. kaa/resources/idol_cards/i_card-skin-hmsz-3-013_1.png +0 -0
  59. kaa/resources/idol_cards/i_card-skin-hrnm-3-013_0.png +0 -0
  60. kaa/resources/idol_cards/i_card-skin-hrnm-3-013_1.png +0 -0
  61. kaa/resources/idol_cards/i_card-skin-hrnm-3-015_0.png +0 -0
  62. kaa/resources/idol_cards/i_card-skin-hrnm-3-015_1.png +0 -0
  63. kaa/resources/idol_cards/i_card-skin-hski-3-015_0.png +0 -0
  64. kaa/resources/idol_cards/i_card-skin-hski-3-015_1.png +0 -0
  65. kaa/resources/idol_cards/i_card-skin-hume-3-015_0.png +0 -0
  66. kaa/resources/idol_cards/i_card-skin-hume-3-015_1.png +0 -0
  67. kaa/resources/idol_cards/i_card-skin-jsna-3-014_0.png +0 -0
  68. kaa/resources/idol_cards/i_card-skin-jsna-3-014_1.png +0 -0
  69. kaa/resources/idol_cards/i_card-skin-kcna-3-015_0.png +0 -0
  70. kaa/resources/idol_cards/i_card-skin-kcna-3-015_1.png +0 -0
  71. kaa/resources/idol_cards/i_card-skin-kllj-3-014_0.png +0 -0
  72. kaa/resources/idol_cards/i_card-skin-kllj-3-014_1.png +0 -0
  73. kaa/resources/idol_cards/i_card-skin-shro-3-014_0.png +0 -0
  74. kaa/resources/idol_cards/i_card-skin-shro-3-014_1.png +0 -0
  75. kaa/resources/idol_cards/i_card-skin-shro-3-015_0.png +0 -0
  76. kaa/resources/idol_cards/i_card-skin-shro-3-015_1.png +0 -0
  77. kaa/resources/idol_cards/i_card-skin-ssmk-3-015_0.png +0 -0
  78. kaa/resources/idol_cards/i_card-skin-ssmk-3-015_1.png +0 -0
  79. kaa/sprites/16db02f4-5297-427d-8c84-587ea5193b53.png +0 -0
  80. kaa/sprites/207594fa-6a0b-45ec-aeff-b3e45348c508.png +0 -0
  81. kaa/sprites/7b5c8883-a1f9-4ce9-bd84-26668577dfc6.png +0 -0
  82. kaa/sprites/9483fae5-3a72-4684-9403-d25d2c602d3d.png +0 -0
  83. kaa/sprites/a3736105-b3e6-467b-888a-f93b8f4d37be.png +0 -0
  84. kaa/sprites/ad2f8633-f5a6-4ae8-853d-88b0254b6216.png +0 -0
  85. kaa/sprites/eaad330d-4e50-4b55-be2c-8da0f72764d9.png +0 -0
  86. kaa/sprites/f0abbf38-ba4b-474a-bdce-f22db7379de2.png +0 -0
  87. {kotonebot/kaa → kaa}/tasks/R.py +153 -131
  88. {kotonebot/kaa → kaa}/tasks/actions/commu.py +3 -3
  89. {kotonebot/kaa → kaa}/tasks/actions/loading.py +1 -1
  90. {kotonebot/kaa → kaa}/tasks/actions/scenes.py +5 -3
  91. {kotonebot/kaa → kaa}/tasks/actions/stats.py +1 -1
  92. {kotonebot/kaa → kaa}/tasks/daily/acquire_activity_funds.py +2 -2
  93. {kotonebot/kaa → kaa}/tasks/daily/acquire_presents.py +2 -2
  94. {kotonebot/kaa → kaa}/tasks/daily/assignment.py +2 -2
  95. {kotonebot/kaa → kaa}/tasks/daily/capsule_toys.py +4 -3
  96. {kotonebot/kaa → kaa}/tasks/daily/club_reward.py +3 -3
  97. {kotonebot/kaa → kaa}/tasks/daily/contest.py +4 -4
  98. {kotonebot/kaa → kaa}/tasks/daily/mission_reward.py +2 -2
  99. {kotonebot/kaa → kaa}/tasks/daily/purchase.py +2 -4
  100. {kotonebot/kaa → kaa}/tasks/daily/upgrade_support_card.py +3 -3
  101. {kotonebot/kaa → kaa}/tasks/end_game.py +1 -1
  102. {kotonebot/kaa → kaa}/tasks/produce/cards.py +76 -8
  103. {kotonebot/kaa → kaa}/tasks/produce/common.py +94 -6
  104. {kotonebot/kaa → kaa}/tasks/produce/in_purodyuusu.py +96 -73
  105. {kotonebot/kaa → kaa}/tasks/produce/non_lesson_actions.py +17 -11
  106. {kotonebot/kaa → kaa}/tasks/produce/p_drink.py +1 -1
  107. {kotonebot/kaa → kaa}/tasks/produce/produce.py +45 -61
  108. {kotonebot/kaa → kaa}/tasks/start_game.py +18 -10
  109. {kotonebot/kaa → kaa}/util/paths.py +1 -1
  110. {ksaa-2025.8.23.1.dist-info → ksaa-2025.9.dist-info}/METADATA +11 -5
  111. ksaa-2025.9.dist-info/RECORD +753 -0
  112. ksaa-2025.9.dist-info/entry_points.txt +2 -0
  113. ksaa-2025.9.dist-info/top_level.txt +1 -0
  114. kotonebot/__init__.py +0 -40
  115. kotonebot/backend/bot.py +0 -302
  116. kotonebot/backend/color.py +0 -525
  117. kotonebot/backend/context/__init__.py +0 -3
  118. kotonebot/backend/context/context.py +0 -1001
  119. kotonebot/backend/context/task_action.py +0 -176
  120. kotonebot/backend/core.py +0 -126
  121. kotonebot/backend/debug/__init__.py +0 -1
  122. kotonebot/backend/debug/entry.py +0 -89
  123. kotonebot/backend/debug/mock.py +0 -79
  124. kotonebot/backend/debug/server.py +0 -223
  125. kotonebot/backend/debug/vars.py +0 -346
  126. kotonebot/backend/dispatch.py +0 -228
  127. kotonebot/backend/flow_controller.py +0 -197
  128. kotonebot/backend/image.py +0 -748
  129. kotonebot/backend/loop.py +0 -277
  130. kotonebot/backend/ocr.py +0 -511
  131. kotonebot/backend/preprocessor.py +0 -103
  132. kotonebot/client/__init__.py +0 -10
  133. kotonebot/client/device.py +0 -500
  134. kotonebot/client/fast_screenshot.py +0 -378
  135. kotonebot/client/host/__init__.py +0 -12
  136. kotonebot/client/host/adb_common.py +0 -94
  137. kotonebot/client/host/custom.py +0 -114
  138. kotonebot/client/host/leidian_host.py +0 -202
  139. kotonebot/client/host/mumu12_host.py +0 -245
  140. kotonebot/client/host/protocol.py +0 -213
  141. kotonebot/client/host/windows_common.py +0 -55
  142. kotonebot/client/implements/__init__.py +0 -7
  143. kotonebot/client/implements/adb.py +0 -85
  144. kotonebot/client/implements/adb_raw.py +0 -159
  145. kotonebot/client/implements/nemu_ipc/__init__.py +0 -8
  146. kotonebot/client/implements/nemu_ipc/external_renderer_ipc.py +0 -280
  147. kotonebot/client/implements/nemu_ipc/nemu_ipc.py +0 -327
  148. kotonebot/client/implements/remote_windows.py +0 -193
  149. kotonebot/client/implements/uiautomator2.py +0 -82
  150. kotonebot/client/implements/windows.py +0 -168
  151. kotonebot/client/protocol.py +0 -69
  152. kotonebot/client/registration.py +0 -24
  153. kotonebot/config/__init__.py +0 -1
  154. kotonebot/config/base_config.py +0 -96
  155. kotonebot/config/manager.py +0 -36
  156. kotonebot/errors.py +0 -72
  157. kotonebot/interop/win/message_box.py +0 -314
  158. kotonebot/interop/win/reg.py +0 -37
  159. kotonebot/interop/win/shortcut.py +0 -43
  160. kotonebot/interop/win/task_dialog.py +0 -469
  161. kotonebot/kaa/db/sqlite.py +0 -25
  162. kotonebot/kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
  163. kotonebot/kaa/resources/game_ver.txt +0 -0
  164. kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-014_0.png +0 -0
  165. kotonebot/kaa/sprites/87f96abd-8290-4a06-bfc4-c7275cd01d9a.png +0 -0
  166. kotonebot/kaa/tasks/actions/__init__.py +0 -0
  167. kotonebot/kaa/tasks/daily/__init__.py +0 -0
  168. kotonebot/kaa/tasks/produce/__init__.py +0 -0
  169. kotonebot/logging/__init__.py +0 -2
  170. kotonebot/logging/log.py +0 -18
  171. kotonebot/primitives/__init__.py +0 -17
  172. kotonebot/primitives/geometry.py +0 -290
  173. kotonebot/primitives/visual.py +0 -63
  174. kotonebot/tools/__init__.py +0 -0
  175. kotonebot/tools/mirror.py +0 -354
  176. kotonebot/ui/__init__.py +0 -0
  177. kotonebot/ui/file_host/sensio.py +0 -36
  178. kotonebot/ui/file_host/tmp_send.py +0 -54
  179. kotonebot/ui/pushkit/__init__.py +0 -3
  180. kotonebot/ui/pushkit/image_host.py +0 -87
  181. kotonebot/ui/pushkit/protocol.py +0 -13
  182. kotonebot/ui/pushkit/wxpusher.py +0 -53
  183. kotonebot/ui/user.py +0 -144
  184. kotonebot/util.py +0 -409
  185. ksaa-2025.8.23.1.dist-info/RECORD +0 -755
  186. ksaa-2025.8.23.1.dist-info/entry_points.txt +0 -2
  187. ksaa-2025.8.23.1.dist-info/top_level.txt +0 -1
  188. {kotonebot/kaa → kaa}/application/adapter/misc_adapter.py +0 -0
  189. {kotonebot/kaa → kaa}/config/__init__.py +0 -0
  190. {kotonebot/kaa → kaa}/config/migrations/__init__.py +0 -0
  191. {kotonebot/kaa → kaa}/config/migrations/_idol.py +0 -0
  192. {kotonebot/kaa → kaa}/config/migrations/_v1_to_v2.py +0 -0
  193. {kotonebot/kaa → kaa}/config/migrations/_v2_to_v3.py +0 -0
  194. {kotonebot/kaa → kaa}/config/migrations/_v3_to_v4.py +0 -0
  195. {kotonebot/kaa → kaa}/config/migrations/_v4_to_v5.py +0 -0
  196. {kotonebot/kaa → kaa}/config/migrations/_v5_to_v6.py +0 -0
  197. {kotonebot/kaa → kaa}/config/upgrade.py +0 -0
  198. {kotonebot/kaa → kaa}/db/__init__.py +0 -0
  199. {kotonebot/kaa → kaa}/db/constants.py +0 -0
  200. {kotonebot/kaa → kaa}/db/idol_card.py +0 -0
  201. {kotonebot/kaa → kaa}/game_ui/__init__.py +0 -0
  202. {kotonebot/kaa → kaa}/game_ui/badge.py +0 -0
  203. {kotonebot/kaa → kaa}/game_ui/common.py +0 -0
  204. {kotonebot/kaa → kaa}/game_ui/commu_event_buttons.py +0 -0
  205. {kotonebot/kaa → kaa}/game_ui/primary_button.py +0 -0
  206. {kotonebot/kaa → kaa}/game_ui/toolbar.py +0 -0
  207. {kotonebot/kaa → kaa}/image_db/__init__.py +0 -0
  208. {kotonebot/kaa → kaa}/image_db/descriptors/__init__.py +0 -0
  209. {kotonebot/kaa → kaa}/image_db/descriptors/hist.py +0 -0
  210. {kotonebot/kaa → kaa}/kaa_context.py +0 -0
  211. {kotonebot/kaa → kaa}/main/__init__.py +0 -0
  212. {kotonebot/kaa → kaa}/main/cli.py +0 -0
  213. {kotonebot/kaa → kaa}/main/dmm_host.py +0 -0
  214. {kotonebot/backend → kaa/resources}/__init__.py +0 -0
  215. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-000_0.png +0 -0
  216. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-000_1.png +0 -0
  217. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-001_0.png +0 -0
  218. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-001_1.png +0 -0
  219. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-2-000_0.png +0 -0
  220. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-2-000_1.png +0 -0
  221. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-000_0.png +0 -0
  222. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-000_1.png +0 -0
  223. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-001_0.png +0 -0
  224. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-001_1.png +0 -0
  225. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-002_0.png +0 -0
  226. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-002_1.png +0 -0
  227. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-003_0.png +0 -0
  228. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-003_1.png +0 -0
  229. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-005_0.png +0 -0
  230. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-005_1.png +0 -0
  231. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-006_0.png +0 -0
  232. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-006_1.png +0 -0
  233. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-007_0.png +0 -0
  234. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-007_1.png +0 -0
  235. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-008_0.png +0 -0
  236. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-008_1.png +0 -0
  237. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-009_0.png +0 -0
  238. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-009_1.png +0 -0
  239. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-010_0.png +0 -0
  240. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-010_1.png +0 -0
  241. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-011_0.png +0 -0
  242. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-011_1.png +0 -0
  243. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-012_0.png +0 -0
  244. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-012_1.png +0 -0
  245. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-013_0.png +0 -0
  246. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-013_1.png +0 -0
  247. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-000_0.png +0 -0
  248. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-000_1.png +0 -0
  249. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-001_0.png +0 -0
  250. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-001_1.png +0 -0
  251. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-2-000_0.png +0 -0
  252. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-2-000_1.png +0 -0
  253. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-000_0.png +0 -0
  254. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-000_1.png +0 -0
  255. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-001_0.png +0 -0
  256. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-001_1.png +0 -0
  257. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-002_0.png +0 -0
  258. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-002_1.png +0 -0
  259. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-003_0.png +0 -0
  260. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-003_1.png +0 -0
  261. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-005_0.png +0 -0
  262. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-005_1.png +0 -0
  263. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-006_0.png +0 -0
  264. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-006_1.png +0 -0
  265. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-007_0.png +0 -0
  266. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-007_1.png +0 -0
  267. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-008_0.png +0 -0
  268. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-008_1.png +0 -0
  269. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-009_0.png +0 -0
  270. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-009_1.png +0 -0
  271. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-010_0.png +0 -0
  272. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-010_1.png +0 -0
  273. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-011_0.png +0 -0
  274. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-011_1.png +0 -0
  275. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-012_0.png +0 -0
  276. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-012_1.png +0 -0
  277. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-013_0.png +0 -0
  278. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-013_1.png +0 -0
  279. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-014_1.png +0 -0
  280. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-015_0.png +0 -0
  281. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-015_1.png +0 -0
  282. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-000_0.png +0 -0
  283. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-000_1.png +0 -0
  284. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-001_0.png +0 -0
  285. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-001_1.png +0 -0
  286. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-2-000_0.png +0 -0
  287. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-2-000_1.png +0 -0
  288. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-000_0.png +0 -0
  289. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-000_1.png +0 -0
  290. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-001_0.png +0 -0
  291. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-001_1.png +0 -0
  292. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-002_0.png +0 -0
  293. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-002_1.png +0 -0
  294. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-005_0.png +0 -0
  295. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-005_1.png +0 -0
  296. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-010_0.png +0 -0
  297. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-010_1.png +0 -0
  298. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-012_0.png +0 -0
  299. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-012_1.png +0 -0
  300. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-000_0.png +0 -0
  301. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-000_1.png +0 -0
  302. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-001_0.png +0 -0
  303. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-001_1.png +0 -0
  304. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-2-000_0.png +0 -0
  305. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-2-000_1.png +0 -0
  306. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-000_0.png +0 -0
  307. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-000_1.png +0 -0
  308. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-001_0.png +0 -0
  309. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-001_1.png +0 -0
  310. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-002_0.png +0 -0
  311. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-002_1.png +0 -0
  312. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-003_0.png +0 -0
  313. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-003_1.png +0 -0
  314. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-004_0.png +0 -0
  315. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-004_1.png +0 -0
  316. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-005_0.png +0 -0
  317. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-005_1.png +0 -0
  318. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-006_0.png +0 -0
  319. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-006_1.png +0 -0
  320. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-007_0.png +0 -0
  321. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-007_1.png +0 -0
  322. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-008_0.png +0 -0
  323. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-008_1.png +0 -0
  324. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-009_0.png +0 -0
  325. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-009_1.png +0 -0
  326. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-010_0.png +0 -0
  327. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-010_1.png +0 -0
  328. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-011_0.png +0 -0
  329. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-011_1.png +0 -0
  330. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-012_0.png +0 -0
  331. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-012_1.png +0 -0
  332. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-014_0.png +0 -0
  333. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-014_1.png +0 -0
  334. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-000_0.png +0 -0
  335. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-000_1.png +0 -0
  336. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-001_0.png +0 -0
  337. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-001_1.png +0 -0
  338. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-2-000_0.png +0 -0
  339. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-2-000_1.png +0 -0
  340. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-000_0.png +0 -0
  341. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-000_1.png +0 -0
  342. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-001_0.png +0 -0
  343. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-001_1.png +0 -0
  344. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-002_0.png +0 -0
  345. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-002_1.png +0 -0
  346. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-003_0.png +0 -0
  347. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-003_1.png +0 -0
  348. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-005_0.png +0 -0
  349. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-005_1.png +0 -0
  350. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-006_0.png +0 -0
  351. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-006_1.png +0 -0
  352. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-007_0.png +0 -0
  353. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-007_1.png +0 -0
  354. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-008_0.png +0 -0
  355. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-008_1.png +0 -0
  356. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-009_0.png +0 -0
  357. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-009_1.png +0 -0
  358. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-010_0.png +0 -0
  359. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-010_1.png +0 -0
  360. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-011_0.png +0 -0
  361. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-011_1.png +0 -0
  362. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-012_0.png +0 -0
  363. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-012_1.png +0 -0
  364. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-013_0.png +0 -0
  365. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-013_1.png +0 -0
  366. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-014_0.png +0 -0
  367. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-014_1.png +0 -0
  368. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-000_0.png +0 -0
  369. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-000_1.png +0 -0
  370. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-001_0.png +0 -0
  371. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-001_1.png +0 -0
  372. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-2-000_0.png +0 -0
  373. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-2-000_1.png +0 -0
  374. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-000_0.png +0 -0
  375. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-000_1.png +0 -0
  376. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-001_0.png +0 -0
  377. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-001_1.png +0 -0
  378. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-002_0.png +0 -0
  379. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-002_1.png +0 -0
  380. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-004_0.png +0 -0
  381. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-004_1.png +0 -0
  382. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-005_0.png +0 -0
  383. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-005_1.png +0 -0
  384. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-006_0.png +0 -0
  385. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-006_1.png +0 -0
  386. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-011_0.png +0 -0
  387. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-011_1.png +0 -0
  388. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-012_0.png +0 -0
  389. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-012_1.png +0 -0
  390. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-013_0.png +0 -0
  391. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-013_1.png +0 -0
  392. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-014_0.png +0 -0
  393. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-014_1.png +0 -0
  394. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-000_0.png +0 -0
  395. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-000_1.png +0 -0
  396. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-001_0.png +0 -0
  397. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-001_1.png +0 -0
  398. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-2-000_0.png +0 -0
  399. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-2-000_1.png +0 -0
  400. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-000_0.png +0 -0
  401. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-000_1.png +0 -0
  402. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-002_0.png +0 -0
  403. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-002_1.png +0 -0
  404. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-003_0.png +0 -0
  405. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-003_1.png +0 -0
  406. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-004_0.png +0 -0
  407. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-004_1.png +0 -0
  408. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-005_0.png +0 -0
  409. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-005_1.png +0 -0
  410. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-006_0.png +0 -0
  411. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-006_1.png +0 -0
  412. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-007_0.png +0 -0
  413. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-007_1.png +0 -0
  414. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-008_0.png +0 -0
  415. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-008_1.png +0 -0
  416. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-010_0.png +0 -0
  417. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-010_1.png +0 -0
  418. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-011_0.png +0 -0
  419. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-011_1.png +0 -0
  420. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-012_0.png +0 -0
  421. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-012_1.png +0 -0
  422. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-013_0.png +0 -0
  423. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-013_1.png +0 -0
  424. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-1-000_0.png +0 -0
  425. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-1-000_1.png +0 -0
  426. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-1-001_0.png +0 -0
  427. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-1-001_1.png +0 -0
  428. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-2-000_0.png +0 -0
  429. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-2-000_1.png +0 -0
  430. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-000_0.png +0 -0
  431. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-000_1.png +0 -0
  432. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-001_0.png +0 -0
  433. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-001_1.png +0 -0
  434. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-002_0.png +0 -0
  435. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-002_1.png +0 -0
  436. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-003_0.png +0 -0
  437. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-003_1.png +0 -0
  438. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-004_0.png +0 -0
  439. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-004_1.png +0 -0
  440. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-005_0.png +0 -0
  441. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-005_1.png +0 -0
  442. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-006_0.png +0 -0
  443. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-006_1.png +0 -0
  444. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-007_0.png +0 -0
  445. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-007_1.png +0 -0
  446. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-008_0.png +0 -0
  447. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-008_1.png +0 -0
  448. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-009_0.png +0 -0
  449. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-009_1.png +0 -0
  450. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-010_0.png +0 -0
  451. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-010_1.png +0 -0
  452. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-011_0.png +0 -0
  453. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-011_1.png +0 -0
  454. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-012_0.png +0 -0
  455. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-012_1.png +0 -0
  456. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-013_0.png +0 -0
  457. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-013_1.png +0 -0
  458. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-1-000_0.png +0 -0
  459. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-1-000_1.png +0 -0
  460. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-1-001_0.png +0 -0
  461. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-1-001_1.png +0 -0
  462. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-2-000_0.png +0 -0
  463. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-2-000_1.png +0 -0
  464. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-000_0.png +0 -0
  465. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-000_1.png +0 -0
  466. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-001_0.png +0 -0
  467. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-001_1.png +0 -0
  468. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-002_0.png +0 -0
  469. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-002_1.png +0 -0
  470. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-004_0.png +0 -0
  471. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-004_1.png +0 -0
  472. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-005_0.png +0 -0
  473. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-005_1.png +0 -0
  474. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-006_0.png +0 -0
  475. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-006_1.png +0 -0
  476. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-007_0.png +0 -0
  477. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-007_1.png +0 -0
  478. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-008_0.png +0 -0
  479. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-008_1.png +0 -0
  480. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-009_0.png +0 -0
  481. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-009_1.png +0 -0
  482. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-010_0.png +0 -0
  483. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-010_1.png +0 -0
  484. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-011_0.png +0 -0
  485. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-011_1.png +0 -0
  486. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-012_0.png +0 -0
  487. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-012_1.png +0 -0
  488. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-013_0.png +0 -0
  489. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-013_1.png +0 -0
  490. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-1-000_0.png +0 -0
  491. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-1-000_1.png +0 -0
  492. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-1-001_0.png +0 -0
  493. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-1-001_1.png +0 -0
  494. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-2-000_0.png +0 -0
  495. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-2-000_1.png +0 -0
  496. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-000_0.png +0 -0
  497. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-000_1.png +0 -0
  498. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-001_0.png +0 -0
  499. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-001_1.png +0 -0
  500. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-002_0.png +0 -0
  501. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-002_1.png +0 -0
  502. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-003_0.png +0 -0
  503. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-003_1.png +0 -0
  504. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-004_0.png +0 -0
  505. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-004_1.png +0 -0
  506. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-006_0.png +0 -0
  507. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-006_1.png +0 -0
  508. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-007_0.png +0 -0
  509. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-007_1.png +0 -0
  510. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-008_0.png +0 -0
  511. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-008_1.png +0 -0
  512. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-009_0.png +0 -0
  513. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-009_1.png +0 -0
  514. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-010_0.png +0 -0
  515. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-010_1.png +0 -0
  516. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-011_0.png +0 -0
  517. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-011_1.png +0 -0
  518. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-012_0.png +0 -0
  519. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-012_1.png +0 -0
  520. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-013_0.png +0 -0
  521. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-013_1.png +0 -0
  522. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-1-000_0.png +0 -0
  523. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-1-000_1.png +0 -0
  524. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-1-001_0.png +0 -0
  525. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-1-001_1.png +0 -0
  526. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-2-000_0.png +0 -0
  527. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-2-000_1.png +0 -0
  528. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-000_0.png +0 -0
  529. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-000_1.png +0 -0
  530. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-001_0.png +0 -0
  531. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-001_1.png +0 -0
  532. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-002_0.png +0 -0
  533. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-002_1.png +0 -0
  534. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-003_0.png +0 -0
  535. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-003_1.png +0 -0
  536. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-005_0.png +0 -0
  537. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-005_1.png +0 -0
  538. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-006_0.png +0 -0
  539. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-006_1.png +0 -0
  540. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-007_0.png +0 -0
  541. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-007_1.png +0 -0
  542. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-008_0.png +0 -0
  543. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-008_1.png +0 -0
  544. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-009_0.png +0 -0
  545. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-009_1.png +0 -0
  546. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-010_0.png +0 -0
  547. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-010_1.png +0 -0
  548. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-011_0.png +0 -0
  549. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-011_1.png +0 -0
  550. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-012_0.png +0 -0
  551. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-012_1.png +0 -0
  552. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-013_0.png +0 -0
  553. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-013_1.png +0 -0
  554. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-014_0.png +0 -0
  555. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-014_1.png +0 -0
  556. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-1-000_0.png +0 -0
  557. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-1-000_1.png +0 -0
  558. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-1-001_0.png +0 -0
  559. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-1-001_1.png +0 -0
  560. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-2-000_0.png +0 -0
  561. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-2-000_1.png +0 -0
  562. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-000_0.png +0 -0
  563. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-000_1.png +0 -0
  564. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-001_0.png +0 -0
  565. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-001_1.png +0 -0
  566. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-002_0.png +0 -0
  567. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-002_1.png +0 -0
  568. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-003_0.png +0 -0
  569. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-003_1.png +0 -0
  570. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-004_0.png +0 -0
  571. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-004_1.png +0 -0
  572. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-006_0.png +0 -0
  573. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-006_1.png +0 -0
  574. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-007_0.png +0 -0
  575. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-007_1.png +0 -0
  576. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-008_0.png +0 -0
  577. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-008_1.png +0 -0
  578. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-009_0.png +0 -0
  579. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-009_1.png +0 -0
  580. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-010_0.png +0 -0
  581. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-010_1.png +0 -0
  582. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-011_0.png +0 -0
  583. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-011_1.png +0 -0
  584. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-012_0.png +0 -0
  585. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-012_1.png +0 -0
  586. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-013_0.png +0 -0
  587. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-013_1.png +0 -0
  588. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-014_0.png +0 -0
  589. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-014_1.png +0 -0
  590. {kotonebot/kaa → kaa}/sprites/00551158-fee9-483f-b034-549139a96f58.png +0 -0
  591. /kotonebot/kaa/sprites/81b9a59e-5714-459b-b6ce-03e1f4c4e503.png → /kaa/sprites/03f4353c-4160-46d1-97cc-474d7f797f1f.png +0 -0
  592. /kotonebot/kaa/sprites/2f707d1b-98d5-47b1-a14c-5c7b95a1cc8c.png → /kaa/sprites/055e54c9-753e-4f8b-b6ea-17dc8e0afb61.png +0 -0
  593. {kotonebot/kaa → kaa}/sprites/05890a1b-8764-4e9f-9d21-65d292c22e13.png +0 -0
  594. /kotonebot/kaa/sprites/e707f860-027c-44ee-a7a3-b18573b539e3.png → /kaa/sprites/06349609-2e10-483b-91b6-bc590d27d2c5.png +0 -0
  595. /kotonebot/kaa/sprites/724e9b7b-0bf6-4d78-b887-9b108474e732.png → /kaa/sprites/06842e56-3de1-4076-81c4-bd5466d2eff5.png +0 -0
  596. {kotonebot/kaa → kaa}/sprites/0949c622-9067-4f0d-bac2-3f938a1d2ed2.png +0 -0
  597. /kotonebot/kaa/sprites/cc65d34b-b220-451e-a18e-66b05b911e97.png → /kaa/sprites/0a41bec8-19c0-483f-848b-1c79f47debbe.png +0 -0
  598. /kotonebot/kaa/sprites/be8a47df-79fe-48c1-b41e-77fe1a26a90b.png → /kaa/sprites/0b279fb0-0c30-4767-bf71-4d34cc1ee9cf.png +0 -0
  599. {kotonebot/kaa → kaa}/sprites/0bf5e34e-afc6-4447-bbac-67026ce2ad26.png +0 -0
  600. {kotonebot/kaa → kaa}/sprites/0c0627be-4a09-4450-a078-1858d3ace532.png +0 -0
  601. /kotonebot/kaa/sprites/5df708a6-1383-47a4-aec7-69f492f4f783.png → /kaa/sprites/0c54e162-a97e-402c-a0e6-7ec47e28b788.png +0 -0
  602. /kotonebot/kaa/sprites/444bc913-a075-4f71-baf8-a94cbb8a8ab0.png → /kaa/sprites/0c78b400-5b9c-4c3c-8973-372d6a10ecd6.png +0 -0
  603. {kotonebot/kaa → kaa}/sprites/0d9ac648-eefa-4869-ac99-1b0c83649681.png +0 -0
  604. {kotonebot/kaa → kaa}/sprites/0f7d581d-cea3-4039-9205-732e4cd29293.png +0 -0
  605. /kotonebot/kaa/sprites/19962647-b587-488b-9ed3-1f4f7ce36406.png → /kaa/sprites/10ef2258-ffc2-4d94-b059-01d2d7f02e2c.png +0 -0
  606. /kotonebot/kaa/sprites/3d8ab1bb-f8a8-4b19-a565-3b06e1cfe11c.png → /kaa/sprites/10f6e608-9ebb-4198-aaf6-cb2a932891ee.png +0 -0
  607. /kotonebot/kaa/sprites/f4212619-497f-4dcd-a197-e7c4c1c1a8ad.png → /kaa/sprites/124ffbb0-eed0-4bd9-9f2d-145746eb27a0.png +0 -0
  608. /kotonebot/kaa/sprites/f162875f-08d7-4a64-a7b2-2fff14497f74.png → /kaa/sprites/134c72e0-4c66-412e-921d-f21d975bfc07.png +0 -0
  609. /kotonebot/kaa/sprites/f8237a04-9f49-4796-9238-8dfab4cabcbe.png → /kaa/sprites/1522d76b-a91f-4f4e-b3df-02276e7249c8.png +0 -0
  610. {kotonebot/kaa → kaa}/sprites/1652f06a-5417-49ef-8949-4854772d9ab7.png +0 -0
  611. /kotonebot/kaa/sprites/80bfcb8e-fb27-4240-85c5-61650419a304.png → /kaa/sprites/16532eae-670d-4708-9396-0dc4070c3027.png +0 -0
  612. /kotonebot/kaa/sprites/51d0f732-2fe9-40c5-b888-8143270d35bb.png → /kaa/sprites/166d2598-e912-4891-9377-945048ac094a.png +0 -0
  613. {kotonebot/kaa → kaa}/sprites/16fbc93d-b294-4001-b4e9-ee2af181415f.png +0 -0
  614. {kotonebot/kaa → kaa}/sprites/185f7838-92a7-460b-9340-f60858948ce9.png +0 -0
  615. /kotonebot/kaa/sprites/640826ef-c7cf-494c-888a-b151ef418531.png → /kaa/sprites/18ec006e-1a82-45de-9e53-10c54ef1de59.png +0 -0
  616. {kotonebot/kaa → kaa}/sprites/1926f2f9-4bd7-48eb-9eba-28ec4efb0606.png +0 -0
  617. /kotonebot/kaa/sprites/b241eff8-039e-4734-bea2-e10da89426d8.png → /kaa/sprites/1b9c5c23-d6b0-4d6c-9cdf-9f5bcc718412.png +0 -0
  618. /kotonebot/kaa/sprites/c48df972-98fd-4303-99df-9374f542beda.png → /kaa/sprites/1b9f7964-d562-437c-a055-7f5381a740d5.png +0 -0
  619. /kotonebot/kaa/sprites/97f4f186-da9e-404c-bf1e-918f1b962fee.png → /kaa/sprites/1c04c78a-ad02-4b0a-a4b6-a2ef16134100.png +0 -0
  620. /kotonebot/kaa/sprites/f79fb63f-1737-4e67-b017-0b34bc93295a.png → /kaa/sprites/1dce8db2-8183-45f5-aaa6-00b4625883d4.png +0 -0
  621. {kotonebot/kaa → kaa}/sprites/213016c2-c3a2-43d8-86a3-ab4d27666ced.png +0 -0
  622. {kotonebot/kaa → kaa}/sprites/23d88465-65d9-4718-8725-8dbf0a98a5a4.png +0 -0
  623. /kotonebot/kaa/sprites/fba7b4b2-46d3-4a5a-a161-6891014e6daf.png → /kaa/sprites/2404d43a-95b5-4bba-9de3-f8a854612701.png +0 -0
  624. /kotonebot/kaa/sprites/184e517f-f37f-4cc8-ac49-6858025903ee.png → /kaa/sprites/24cb2b15-d55b-4fcd-b02a-81ec7b56cdb6.png +0 -0
  625. {kotonebot/kaa → kaa}/sprites/24dc7158-036c-4a66-9280-e934f470be53.png +0 -0
  626. {kotonebot/kaa → kaa}/sprites/24e99232-9434-457f-a9a0-69dd7ecf675f.png +0 -0
  627. {kotonebot/kaa → kaa}/sprites/25f00ee3-8dfe-42d1-a67e-191fa5c3df4b.png +0 -0
  628. /kotonebot/kaa/sprites/5661e7a0-9513-4bb6-9549-87b7ad871a0d.png → /kaa/sprites/2a82a975-d4a4-44a5-9755-867f06e6969e.png +0 -0
  629. /kotonebot/kaa/sprites/53eca690-1c14-4424-9456-3a8397ae9ff3.png → /kaa/sprites/2ace1e32-3a6c-4a7e-951c-3c5e216e190e.png +0 -0
  630. /kotonebot/kaa/sprites/e2287baf-c165-467b-8b6c-640d1f2ee376.png → /kaa/sprites/2b406314-82d8-407b-a2e6-85b6c67f19f1.png +0 -0
  631. {kotonebot/kaa → kaa}/sprites/2bd6fe88-99fa-443d-8e42-bb3de5881213.png +0 -0
  632. /kotonebot/kaa/sprites/d3832642-3108-4947-8274-68ad8a78b690.png → /kaa/sprites/2c7e603e-4524-48f6-afb6-3b226292b5d5.png +0 -0
  633. /kotonebot/kaa/sprites/a7f4d9cb-d0ee-4abd-b9fa-148c059c7a0f.png → /kaa/sprites/2c9318f4-4aa3-4803-a93f-f39b0177c49f.png +0 -0
  634. {kotonebot/kaa → kaa}/sprites/2ededcf5-1d80-4e2a-9c83-2a31998331ce.png +0 -0
  635. /kotonebot/kaa/sprites/c84958c3-37a8-4f1e-9874-45d2c3723b80.png → /kaa/sprites/2fa93a4b-b104-4b35-9ddb-c3098cc6ac8d.png +0 -0
  636. /kotonebot/kaa/sprites/59f54f2a-1efb-4d5a-b76b-b740ddf561ec.png → /kaa/sprites/3024ea29-3c2a-494f-99c6-f48c90b9e157.png +0 -0
  637. {kotonebot/kaa → kaa}/sprites/303cccc1-c674-4d3a-8c89-19ea729fdbef.png +0 -0
  638. {kotonebot/kaa → kaa}/sprites/30a6f399-6999-4f04-bb77-651e0214112f.png +0 -0
  639. /kotonebot/kaa/sprites/d61df6da-4b09-4b8c-bc97-46632a80fcd9.png → /kaa/sprites/30e3c754-4231-481c-9bf2-ba532503cbd8.png +0 -0
  640. /kotonebot/kaa/sprites/034203b6-cadb-4b7c-af70-3e9551083457.png → /kaa/sprites/30ea28ac-a7c3-4f60-aaf6-2e641a760ba6.png +0 -0
  641. /kotonebot/kaa/sprites/649f1c6d-03f8-4e84-87a7-b3418bdb9f61.png → /kaa/sprites/321ee0f9-c89f-4abd-bc7b-020429326361.png +0 -0
  642. /kotonebot/kaa/sprites/2e76fba4-b9db-47ce-b6a4-d0a857b3fd4b.png → /kaa/sprites/35935996-53ad-47e5-b821-879945df3167.png +0 -0
  643. {kotonebot/kaa → kaa}/sprites/3942ae40-7f22-412c-aebe-4b064f68db9b.png +0 -0
  644. /kotonebot/kaa/sprites/5efaf4bf-b3cb-456f-88a1-ff1d28be80c1.png → /kaa/sprites/3b2ccce1-2507-4cfe-afd7-6c584c73fc52.png +0 -0
  645. {kotonebot/kaa → kaa}/sprites/3b473fe6-e147-477f-b088-9b8fb042a4f6.png +0 -0
  646. {kotonebot/kaa → kaa}/sprites/3c8b477a-8eda-407e-9e9f-7540c8808f89.png +0 -0
  647. /kotonebot/kaa/sprites/0b3b7c7d-ad01-44dd-bd25-c819eb002a31.png → /kaa/sprites/3f53fe69-f49e-4a34-86bd-608c74e4f33b.png +0 -0
  648. {kotonebot/kaa → kaa}/sprites/3f637e86-6b74-4693-9131-1fe411fc21e5.png +0 -0
  649. /kotonebot/kaa/sprites/bbc8ae86-9ad5-4fc7-8662-05a096ec1b84.png → /kaa/sprites/3f955b28-d82b-4bff-bc90-0b579d7b8304.png +0 -0
  650. /kotonebot/kaa/sprites/d289f4e1-e92e-4263-93a4-33da4767d7a9.png → /kaa/sprites/3ff71180-76ef-4325-bc67-606bca5bbd8e.png +0 -0
  651. {kotonebot/kaa → kaa}/sprites/4096cffa-a889-4622-852e-760fc7022d93.png +0 -0
  652. /kotonebot/kaa/sprites/9a9c9044-53c6-40f7-8eb5-2dc71383e58c.png → /kaa/sprites/41ebad4c-2047-42b4-a008-29db3e918045.png +0 -0
  653. /kotonebot/kaa/sprites/e38ced13-5ab3-47ee-b10b-63b5ed4224fb.png → /kaa/sprites/43c3ca7f-4d38-4d03-bb68-fa7e0465612a.png +0 -0
  654. /kotonebot/kaa/sprites/9d87795b-c322-49c6-a9c9-6064828a55a2.png → /kaa/sprites/4454792c-6ebf-4b96-af13-ef1d12531314.png +0 -0
  655. {kotonebot/kaa → kaa}/sprites/447d0e44-5d87-4b7c-8e60-edb111fe1639.png +0 -0
  656. {kotonebot/kaa → kaa}/sprites/44ba8515-4a60-42c9-8878-b42e4e34ee15.png +0 -0
  657. {kotonebot/kaa → kaa}/sprites/4503db6b-7224-4b81-9971-e7cfa56e10f2.png +0 -0
  658. /kotonebot/kaa/sprites/a8a3d531-9024-4603-a864-64bfe439a9ab.png → /kaa/sprites/45a97ef7-99ef-4ea9-8329-1b0577647bc0.png +0 -0
  659. {kotonebot/kaa → kaa}/sprites/4695f96b-c4f5-4bb6-a021-a13b6ceb2883.png +0 -0
  660. {kotonebot/kaa → kaa}/sprites/4883c564-f950-4a29-9f5f-6f924123cd22.png +0 -0
  661. {kotonebot/kaa → kaa}/sprites/4d78add6-1027-4939-bb51-f99fca7db2ce.png +0 -0
  662. /kotonebot/kaa/sprites/46abcf20-513c-4759-9976-eaab68be7f8f.png → /kaa/sprites/4f3c19db-154c-438d-b93c-3cc6ad1bc603.png +0 -0
  663. /kotonebot/kaa/sprites/e734df59-a24f-42e2-9f53-3ca720ddc612.png → /kaa/sprites/4f43aab0-06ef-47e2-9aea-82153cf73d89.png +0 -0
  664. /kotonebot/kaa/sprites/1cc8c106-1830-433e-956f-7d31a01da99e.png → /kaa/sprites/4f4b72d5-61c5-4d76-a265-84d5c376de80.png +0 -0
  665. {kotonebot/kaa → kaa}/sprites/5031808b-5525-4118-92b4-317ec8bda985.png +0 -0
  666. {kotonebot/kaa → kaa}/sprites/50e23c8a-7ba2-4c9c-9cfb-196c260fa1d5.png +0 -0
  667. {kotonebot/kaa → kaa}/sprites/55f7db71-0a18-4b3d-b847-57959b8d2e32.png +0 -0
  668. /kotonebot/kaa/sprites/37686733-d013-4580-b255-6db73142c0f6.png → /kaa/sprites/57cdefa6-4168-43f6-b584-a15b46114277.png +0 -0
  669. {kotonebot/kaa → kaa}/sprites/582d36c0-0916-4706-9833-4fbc026701f5.png +0 -0
  670. /kotonebot/kaa/sprites/f53ff71d-54b5-44d2-9e48-ad2dee918fd1.png → /kaa/sprites/589bfdd8-9d3a-4c19-a2e6-116824350b6e.png +0 -0
  671. /kotonebot/kaa/sprites/e072322f-eff1-4cbd-80c2-4e2103a1aa2f.png → /kaa/sprites/5c99c6b4-8a09-4e34-a5a9-496e1188b3b5.png +0 -0
  672. {kotonebot/kaa → kaa}/sprites/5d36b880-7b3f-49b1-a018-7de59867d376.png +0 -0
  673. {kotonebot/kaa → kaa}/sprites/5ebcde3b-f0fd-4e5d-b3de-ada8f0b5e03b.png +0 -0
  674. /kotonebot/kaa/sprites/5e473a8c-bf57-44d8-a711-db1f4ccc182c.png → /kaa/sprites/5fc9e5c2-a8cb-43e3-b0c2-9bca4877b44b.png +0 -0
  675. /kotonebot/kaa/sprites/97f26adc-071b-4289-8243-dc20e024c7e4.png → /kaa/sprites/686bfe8b-787c-4ad8-852e-0e2c58f6dc42.png +0 -0
  676. /kotonebot/kaa/sprites/8836e28c-e310-4870-94d2-b58e5dffad49.png → /kaa/sprites/69ac12a4-5ab2-4e64-9508-688b1e7dfdd5.png +0 -0
  677. {kotonebot/kaa → kaa}/sprites/6b58d90d-2e5e-4b7f-bc01-941f2633de89.png +0 -0
  678. {kotonebot/kaa → kaa}/sprites/6cd80be8-c9b3-4ba5-bf17-3ffc9b000743.png +0 -0
  679. /kotonebot/kaa/sprites/64969b0b-a6ef-4342-a967-20428d5baa65.png → /kaa/sprites/6e5a4c13-1e63-4b23-a19f-6d8f4f899b38.png +0 -0
  680. {kotonebot/kaa → kaa}/sprites/70898bf8-56c5-4f84-becb-629c9ab6a7da.png +0 -0
  681. /kotonebot/kaa/sprites/15552124-cc5c-4abe-b08d-123624248d77.png → /kaa/sprites/715591f4-19db-4dba-a313-d728ec8aa9f3.png +0 -0
  682. /kotonebot/kaa/sprites/6e3515d4-68ce-4760-948b-5fb20576fc12.png → /kaa/sprites/71da60b3-a0c2-4211-ba8b-a60a87d046d6.png +0 -0
  683. /kotonebot/kaa/sprites/814da106-1756-4bce-9140-d2730b635e7e.png → /kaa/sprites/7303cb87-5d31-4725-b40f-4a71b054a473.png +0 -0
  684. {kotonebot/kaa → kaa}/sprites/74ec3510-583d-4a76-ac69-38480fbf1387.png +0 -0
  685. /kotonebot/kaa/sprites/725e767e-79bb-4ce6-a448-8ebee80193b7.png → /kaa/sprites/75636434-d148-4855-9a28-7624e066fc43.png +0 -0
  686. /kotonebot/kaa/sprites/c1c710cd-885b-4b2c-9752-8a2754d0f72d.png → /kaa/sprites/7626a19a-53ce-44f9-8038-5d5f6cb400ec.png +0 -0
  687. /kotonebot/kaa/sprites/8d595a36-a900-42ea-871f-f17f99d5d73a.png → /kaa/sprites/7644328c-160c-49b0-8040-5de2191acade.png +0 -0
  688. /kotonebot/kaa/sprites/288ca9e3-237f-4de6-ba06-e586a9f87d03.png → /kaa/sprites/781b0414-4530-47a3-a2b2-dcaa22043bfa.png +0 -0
  689. /kotonebot/kaa/sprites/b34a76e2-e318-47a0-b194-6e1b01eb269c.png → /kaa/sprites/785e477b-0917-40f3-ad98-0458b816bfa2.png +0 -0
  690. /kotonebot/kaa/sprites/cac8bff8-569e-450f-8ac7-dad3eebf18d9.png → /kaa/sprites/78ce3025-c313-4dee-9097-96bb0b428584.png +0 -0
  691. {kotonebot/kaa → kaa}/sprites/79abd239-5eed-4195-9fa8-d729daa874ca.png +0 -0
  692. /kotonebot/kaa/sprites/ceaa1281-57d5-4c32-b5e2-86781518709b.png → /kaa/sprites/7b0c2c89-8a01-40ee-bfec-f6bd36e3ebd0.png +0 -0
  693. /kotonebot/kaa/sprites/4fa138a2-4f39-4023-afd4-af5be7df662b.png → /kaa/sprites/7eace29d-0d92-47b2-a6b2-8616fe1f1628.png +0 -0
  694. /kotonebot/kaa/sprites/8f8f1144-5c30-41f0-8a6b-b39fe78e3e99.png → /kaa/sprites/7fba4fb5-fe30-44c5-90ca-23c40b3e78fb.png +0 -0
  695. {kotonebot/kaa → kaa}/sprites/81c97cd3-df53-44d3-bf3d-1eb4dc67b62a.png +0 -0
  696. {kotonebot/kaa → kaa}/sprites/835489e2-b29b-426c-b4c9-3bb9f8eb6195.png +0 -0
  697. {kotonebot/kaa → kaa}/sprites/83d0a033-466c-463a-bb8c-be0f2953e9b2.png +0 -0
  698. {kotonebot/kaa → kaa}/sprites/8424ecdd-8857-4764-9fd0-d4bfa440c128.png +0 -0
  699. /kotonebot/kaa/sprites/974015ca-854d-43e3-a8ed-faa247d304bc.png → /kaa/sprites/8831d905-96e9-454c-9b18-12717a868244.png +0 -0
  700. /kotonebot/kaa/sprites/32395105-71b0-4f98-a439-c181e82a648e.png → /kaa/sprites/88563ae3-26a5-43b6-92f0-8200639d9dfc.png +0 -0
  701. /kotonebot/kaa/sprites/6fe17986-a29d-4198-b366-1c40637069b5.png → /kaa/sprites/8b0d963b-5430-4686-97e5-0c7ccdf4a0c9.png +0 -0
  702. /kotonebot/kaa/sprites/4999097e-2f8b-4965-9e7e-cb9801f8ed0e.png → /kaa/sprites/8b248585-c463-4a01-b189-7bda5f30c508.png +0 -0
  703. {kotonebot/kaa → kaa}/sprites/8c179a21-be6f-4db8-a9b0-9afeb5c36b1c.png +0 -0
  704. {kotonebot/kaa → kaa}/sprites/8ded6c98-85ea-4858-a66d-4fc8caecb7c5.png +0 -0
  705. /kotonebot/kaa/sprites/2af71658-11c3-4c34-b604-003fb8a6a542.png → /kaa/sprites/8f76e6f2-4069-421e-9867-7212e17f7fb3.png +0 -0
  706. {kotonebot/kaa → kaa}/sprites/8f8b7b46-53bb-42ab-907a-4ea87eb09ab4.png +0 -0
  707. /kotonebot/kaa/sprites/d67de935-b5f2-4176-ab52-d0482290cb59.png → /kaa/sprites/8fbd928c-1eff-4dd6-8009-fd1a52c7eee5.png +0 -0
  708. /kotonebot/kaa/sprites/56c4d716-65b3-4fb8-badb-970853544c7a.png → /kaa/sprites/9066e428-a248-46f5-9309-13a7f1ec608e.png +0 -0
  709. /kotonebot/kaa/sprites/34fd0d97-1018-4986-b990-29e48abc2a56.png → /kaa/sprites/90eb7800-7ec7-494d-91ee-8cec501b67a9.png +0 -0
  710. {kotonebot/kaa → kaa}/sprites/921eefeb-730e-46fc-9924-d338fb286592.png +0 -0
  711. {kotonebot/kaa → kaa}/sprites/9340b854-025c-40da-9387-385d38433bef.png +0 -0
  712. /kotonebot/kaa/sprites/6dacc5c6-85e2-4e26-b7a4-6bda6cc3ed0e.png → /kaa/sprites/9469635b-8fef-470b-907e-f7491d144243.png +0 -0
  713. /kotonebot/kaa/sprites/fc64316e-8394-4019-a16f-d6e7bb83d9bf.png → /kaa/sprites/94a098bc-8a4e-41be-ac14-0d5528517241.png +0 -0
  714. /kotonebot/kaa/sprites/647e6110-8c89-4c34-9352-b8b321c61500.png → /kaa/sprites/95c0e57a-6983-4951-b7bc-863a3638a186.png +0 -0
  715. /kotonebot/kaa/sprites/8af8652d-06fe-4d2c-b123-641c7fbc651d.png → /kaa/sprites/97adcebd-bf26-4155-bc64-ac7d3f59d419.png +0 -0
  716. /kotonebot/kaa/sprites/d55c4fd9-f8be-467a-923f-03cef8bd0525.png → /kaa/sprites/98699927-81c8-4ddc-a5fc-5d0fe03b4c72.png +0 -0
  717. /kotonebot/kaa/sprites/44b34d58-8178-416f-88bc-a3c4a5a26bac.png → /kaa/sprites/9ab2e90a-6f3a-442a-a0eb-10a935514656.png +0 -0
  718. /kotonebot/kaa/sprites/b80cec57-1d9c-4e40-a4d2-df1e1b1546d3.png → /kaa/sprites/9ab3a1a5-40d6-45ca-873d-22c270f264ea.png +0 -0
  719. /kotonebot/kaa/sprites/62b425ac-3e19-4924-8a58-c085f4d38f56.png → /kaa/sprites/9b70d18f-52b6-4616-9e05-c1c52cb4df7a.png +0 -0
  720. /kotonebot/kaa/sprites/ccb670dd-7c8e-4bc9-8e73-934ce26d23a8.png → /kaa/sprites/9e893645-1ed3-4cc9-8dea-dad90617f61a.png +0 -0
  721. {kotonebot/kaa → kaa}/sprites/9fd0753f-c607-4d49-82d1-40bda27e014f.png +0 -0
  722. {kotonebot/interop/win → kaa/sprites}/__init__.py +0 -0
  723. {kotonebot/kaa → kaa}/sprites/a0bd6a5f-784d-4f0a-9d66-10f4b80c8d3e.png +0 -0
  724. {kotonebot/kaa → kaa}/sprites/a1df3af1-a3e7-4521-a085-e4dc3cd1cc57.png +0 -0
  725. /kotonebot/kaa/sprites/b6f57baa-1d05-464f-81c9-0014063d6656.png → /kaa/sprites/a227e737-e250-483e-ab27-920a050949d5.png +0 -0
  726. {kotonebot/kaa → kaa}/sprites/a48324ae-7c1a-489e-b3c4-93d12267f88d.png +0 -0
  727. /kotonebot/kaa/sprites/c32068c9-6e52-4176-98de-fd4d252969dd.png → /kaa/sprites/a552aef0-ddff-4f6f-a4a2-01961cd4456a.png +0 -0
  728. /kotonebot/kaa/sprites/d88c35b8-f101-4557-b2a5-0f7846fecd4c.png → /kaa/sprites/a6075d44-059b-41b1-b85b-c788465dfd28.png +0 -0
  729. /kotonebot/kaa/sprites/cf89988c-c930-4890-8a55-018de7a4ae5a.png → /kaa/sprites/a6aa055f-298c-4695-8efd-492159f832f5.png +0 -0
  730. /kotonebot/kaa/sprites/6e314b73-5ff5-4aa9-9dc3-1ebf28a578a7.png → /kaa/sprites/a8c555f5-d7d5-4ffd-85c7-1fc8bd1014df.png +0 -0
  731. {kotonebot/kaa → kaa}/sprites/a9fcaf04-0c1f-4b0f-bb5b-ede9da96180f.png +0 -0
  732. /kotonebot/kaa/sprites/ef601e20-dc47-4c70-a251-4238fde74d49.png → /kaa/sprites/ab075e3f-963f-4a55-9fed-6e4eb9f2c553.png +0 -0
  733. /kotonebot/kaa/sprites/0bab5a6b-631c-4661-8035-50a03299bd08.png → /kaa/sprites/ab984712-9e57-4c42-ac5e-f90079f2902a.png +0 -0
  734. {kotonebot/kaa → kaa}/sprites/adc533a7-970b-4c5b-a037-2181531a35d6.png +0 -0
  735. {kotonebot/kaa → kaa}/sprites/ae9fe233-9acc-4e96-ba8e-1fb1d9bc2ea5.png +0 -0
  736. {kotonebot/kaa → kaa}/sprites/b0283997-7931-476d-a92f-d7569f6ea34c.png +0 -0
  737. /kotonebot/kaa/sprites/9ac47ce9-2594-4740-ba70-c61f97c0f992.png → /kaa/sprites/b14d0a2e-9ba8-4196-aafb-beeee7f51767.png +0 -0
  738. /kotonebot/kaa/sprites/50718df3-1b0e-425f-802c-ca4abd08a4b5.png → /kaa/sprites/b21fa3a4-1aab-46a2-be7a-01d548f2ea9d.png +0 -0
  739. {kotonebot/kaa → kaa}/sprites/b2af59e9-60e3-4d97-8c72-c7ba092113a3.png +0 -0
  740. /kotonebot/kaa/sprites/998be65c-b835-4004-bbe0-411a4d74985c.png → /kaa/sprites/b2c45f1d-e548-4eba-b306-b5eb356ff29b.png +0 -0
  741. {kotonebot/kaa → kaa}/sprites/b2e1bf3c-2c36-4fb5-9db7-c10a29563a37.png +0 -0
  742. /kotonebot/kaa/sprites/180168f7-9ead-4ce3-9cd9-b1960d649e5c.png → /kaa/sprites/b341f18a-dfcc-4387-b146-061b308f5bea.png +0 -0
  743. {kotonebot/kaa → kaa}/sprites/b62bf889-da3c-495a-8707-f3bde73efe92.png +0 -0
  744. {kotonebot/kaa → kaa}/sprites/b6b94f21-ef4b-4425-9c7e-ca2b574b0add.png +0 -0
  745. /kotonebot/kaa/sprites/71841087-2d73-4726-943a-c784df0b0d2d.png → /kaa/sprites/ba1b392d-ad28-4668-8b91-94d161d1a16d.png +0 -0
  746. /kotonebot/kaa/sprites/441934e4-3659-4522-985c-0e683eb03f1c.png → /kaa/sprites/ba45b90d-0e6f-4188-a0df-069e2a6914bd.png +0 -0
  747. {kotonebot/kaa → kaa}/sprites/bab6c393-692c-4681-ac0d-76c0d9dabea6.png +0 -0
  748. {kotonebot/kaa → kaa}/sprites/bc7155ac-18c9-4335-9ec2-c8762d37a057.png +0 -0
  749. /kotonebot/kaa/sprites/4c4339dc-c9b2-4a3c-a80a-02512d281289.png → /kaa/sprites/be5c90c5-da5f-40d5-bc5a-3d677abc5795.png +0 -0
  750. /kotonebot/kaa/sprites/c35208a6-261e-4a2e-aeae-aae19d8c83d6.png → /kaa/sprites/bfb3a923-7b5e-439d-a19a-fd5150ec8443.png +0 -0
  751. /kotonebot/kaa/sprites/a5e675c9-8fc8-46f2-ae73-bc871d65daaf.png → /kaa/sprites/c0c1a392-bc82-48c2-a304-0587e7038279.png +0 -0
  752. {kotonebot/kaa → kaa}/sprites/c3f536d6-a04a-4651-b3f9-dd2c22593f7f.png +0 -0
  753. {kotonebot/kaa → kaa}/sprites/c5b7d67e-7260-4f08-a0e9-4d31ce9bbecf.png +0 -0
  754. {kotonebot/kaa → kaa}/sprites/c78c38cc-7b61-4dc4-820d-0a5b684ef52e.png +0 -0
  755. /kotonebot/kaa/sprites/87ee5cea-6fb4-4768-8767-3c422df08371.png → /kaa/sprites/c7daf7d5-42b0-4c38-be47-d3b957211e2a.png +0 -0
  756. /kotonebot/kaa/sprites/8fad2402-594e-4466-927a-1f83139d7edf.png → /kaa/sprites/c916030c-dc67-4c88-9b86-390c8f66f0c8.png +0 -0
  757. {kotonebot/kaa → kaa}/sprites/c948f136-416f-447e-8152-54a1cd1d1329.png +0 -0
  758. {kotonebot/kaa → kaa}/sprites/c954e153-d3e9-4488-869f-d00cfdfac5ee.png +0 -0
  759. /kotonebot/kaa/sprites/e129c096-35c3-4fd8-b30c-ce92c3c9b85f.png → /kaa/sprites/ca80e346-d3d9-4228-9b92-373467dadadd.png +0 -0
  760. {kotonebot/kaa → kaa}/sprites/cb3d0ca7-8d14-408a-a2f5-2e25f7b86d6c.png +0 -0
  761. {kotonebot/kaa → kaa}/sprites/cbf4ce9c-f8d8-4fb7-a197-15bb9847df04.png +0 -0
  762. {kotonebot/kaa → kaa}/sprites/cc60b509-2ed5-493d-bb9f-333c6d2a6006.png +0 -0
  763. {kotonebot/kaa → kaa}/sprites/cc8a495d-330d-447d-8a80-a8a6ecc409c5.png +0 -0
  764. {kotonebot/kaa → kaa}/sprites/ccbcb114-7f73-43d1-904a-3a7ae660c531.png +0 -0
  765. {kotonebot/kaa → kaa}/sprites/ce1d1d6f-38f2-48bf-98bd-6e091c7ca5b8.png +0 -0
  766. {kotonebot/kaa → kaa}/sprites/ce20a856-5629-4f8e-a8e1-d1bd14e18e4f.png +0 -0
  767. /kotonebot/kaa/sprites/28282c09-6ce2-4d65-8475-1fc6fbf54e15.png → /kaa/sprites/cfa95767-6869-42c2-94ec-a2ffeca8179f.png +0 -0
  768. {kotonebot/kaa → kaa}/sprites/cfc9c8e8-cbe1-49f0-9afa-ead7f9455a2e.png +0 -0
  769. /kotonebot/kaa/sprites/9dcb4207-f546-4382-a87d-5d3377a31f4f.png → /kaa/sprites/d224df78-a15a-4edc-91c0-c6243c3c43b4.png +0 -0
  770. {kotonebot/kaa → kaa}/sprites/d271a24f-efe8-424d-8fd5-f6b3756ba4ca.png +0 -0
  771. /kotonebot/kaa/sprites/d61a93e8-0e24-40d8-814a-402765d057ea.png → /kaa/sprites/d2d4752f-7c62-42d3-8d3a-f5d186bc0e0d.png +0 -0
  772. {kotonebot/kaa → kaa}/sprites/d3424d31-0502-4623-996e-f0194e5085ce.png +0 -0
  773. {kotonebot/kaa → kaa}/sprites/d3cc3323-51af-4882-ae12-49e7384b746d.png +0 -0
  774. /kotonebot/kaa/sprites/2ebe4066-c47c-4284-a52d-b3f5bed523f3.png → /kaa/sprites/d4db176f-8597-4c3e-99e8-a7acc4012df8.png +0 -0
  775. /kotonebot/kaa/sprites/7f459ed4-063c-48ab-a9ed-48f73bd3a865.png → /kaa/sprites/d53b56af-153c-476c-bab5-1478a66eecb2.png +0 -0
  776. {kotonebot/kaa → kaa}/sprites/d6b64759-26b7-45b1-bf8e-5c0d98611e0d.png +0 -0
  777. /kotonebot/kaa/sprites/c38d6852-316f-4a77-9987-e15789ee8612.png → /kaa/sprites/d727e802-443b-4f14-a448-caf53426c488.png +0 -0
  778. {kotonebot/kaa → kaa}/sprites/d7667903-7149-4f2f-9c15-d8a4b5f4d347.png +0 -0
  779. {kotonebot/kaa → kaa}/sprites/d83f338d-dde3-494b-9bea-cae511e3517c.png +0 -0
  780. {kotonebot/kaa → kaa}/sprites/d982d2b5-4bc0-4ae9-a516-f29c2848d64b.png +0 -0
  781. {kotonebot/kaa → kaa}/sprites/da439e8c-3b74-4371-9657-0736d826c7d1.png +0 -0
  782. {kotonebot/kaa → kaa}/sprites/daf3d823-b7f1-4584-acf3-90b9d880332c.png +0 -0
  783. {kotonebot/kaa → kaa}/sprites/db7d3f03-1f7f-43bf-8125-f7c2d345fca2.png +0 -0
  784. /kotonebot/kaa/sprites/a938bf45-e622-424f-829a-76152586f413.png → /kaa/sprites/dd4987ea-d1a0-4a84-a7b6-6023eb5c4ec8.png +0 -0
  785. {kotonebot/kaa → kaa}/sprites/de325534-3fd3-480a-9eb8-eb47960a753a.png +0 -0
  786. /kotonebot/kaa/sprites/cdd7bbc5-8ebd-4a5c-84ca-0e7ca7702d8f.png → /kaa/sprites/de9bbc4c-6d29-422f-8f29-82870270efb3.png +0 -0
  787. /kotonebot/kaa/sprites/6a77517b-99b1-42a1-ba61-a3109151339e.png → /kaa/sprites/dedc30bf-4a69-4bec-b3f7-c3b1fcf61283.png +0 -0
  788. {kotonebot/kaa → kaa}/sprites/df991b42-ed8e-4f2c-bf0c-aa7522f147b6.png +0 -0
  789. /kotonebot/kaa/sprites/87b36188-2bf9-4b56-98cf-9e8df3879dbf.png → /kaa/sprites/e149613e-d126-42f8-94c9-180cf2244041.png +0 -0
  790. {kotonebot/kaa → kaa}/sprites/e4683def-8d1d-472b-a5ab-bb3885c0c98e.png +0 -0
  791. /kotonebot/kaa/sprites/f68eb4f1-b30b-43fc-8a24-11394cc759d2.png → /kaa/sprites/e56f125e-1b4b-48ea-be9c-256496f91f6f.png +0 -0
  792. {kotonebot/kaa → kaa}/sprites/e5e84f9e-28da-4cf4-bcba-c9145fe39b07.png +0 -0
  793. /kotonebot/kaa/sprites/8dfc96b9-678a-4126-914a-8b5ba920e280.png → /kaa/sprites/e5f0644a-26a7-4d00-a5c8-2e6263b0e547.png +0 -0
  794. /kotonebot/kaa/sprites/5af6d58e-52c5-47fd-8ea5-c2fa8bb67e99.png → /kaa/sprites/e62398fa-f25e-4a1b-86d6-f89ec096cc27.png +0 -0
  795. /kotonebot/kaa/sprites/7465297a-497d-41fa-948d-7f04ad5fdc94.png → /kaa/sprites/e65f87fe-3a59-4465-90cd-5167fb3aa4ae.png +0 -0
  796. {kotonebot/kaa → kaa}/sprites/e6b45405-cd9f-4c6e-a9f1-6ec953747c65.png +0 -0
  797. /kotonebot/kaa/sprites/cca278bb-88cb-4898-8bbe-f52a49a0f740.png → /kaa/sprites/e772ae1e-3c75-417c-bd36-52b5fa046cf9.png +0 -0
  798. /kotonebot/kaa/sprites/38526b38-7f62-466b-8702-0c657891c7fa.png → /kaa/sprites/e80f5d59-6c4a-4d40-8fd2-7ccfc8f20d08.png +0 -0
  799. {kotonebot/kaa → kaa}/sprites/e88c9ad1-ec37-4fcd-b086-862e1e7ce8fd.png +0 -0
  800. /kotonebot/kaa/sprites/32966af9-8bfe-4b67-b9b5-2fd5e2678468.png → /kaa/sprites/e8ef0ab6-9132-410d-ad44-c6bbdda8298a.png +0 -0
  801. {kotonebot/kaa → kaa}/sprites/e9ee330d-dfca-440e-8b8c-0a3b4e8c8730.png +0 -0
  802. {kotonebot/kaa → kaa}/sprites/ea1ba124-9cb3-4427-969a-bacd47e7d920.png +0 -0
  803. {kotonebot/kaa → kaa}/sprites/eaba6ebe-f0df-4918-aee5-ef4e3ffedcf0.png +0 -0
  804. /kotonebot/kaa/sprites/1989466d-c486-4e0c-acc9-ed3116e3c0b8.png → /kaa/sprites/ecd053a6-3791-4535-8e7f-65c740619fc5.png +0 -0
  805. /kotonebot/kaa/sprites/0411b7d9-8f30-44c8-ad51-fde15025ab5f.png → /kaa/sprites/edecb8c9-60b8-4576-8c56-03a33f0a2496.png +0 -0
  806. {kotonebot/kaa → kaa}/sprites/ee4e512b-4982-49b6-9c71-31984b58e1d0.png +0 -0
  807. /kotonebot/kaa/sprites/24b645e9-66a6-4c4b-8273-c895ba6b8324.png → /kaa/sprites/ee775922-936a-4445-85fc-0a2607fea917.png +0 -0
  808. {kotonebot/kaa → kaa}/sprites/eef25cf9-afd0-43b1-b9c5-fbd997bd5fe0.png +0 -0
  809. /kotonebot/kaa/sprites/cdbf1f7f-63f6-40d7-a3b6-3d64bd6f9083.png → /kaa/sprites/ef0226e3-6bad-4b40-9056-7dc2952b4de9.png +0 -0
  810. /kotonebot/kaa/sprites/a43abe98-376b-4da7-ab17-b6c9e1a875fb.png → /kaa/sprites/ef84cc0f-4699-4514-8d1f-cf1ca30ce790.png +0 -0
  811. {kotonebot/kaa → kaa}/sprites/f1f21925-3e22-4dd1-b53b-bb52bcf26c2b.png +0 -0
  812. {kotonebot/kaa → kaa}/sprites/f43c313b-8a7b-467b-8442-fc5bcb8b4388.png +0 -0
  813. {kotonebot/kaa → kaa}/sprites/f5c16d2f-ebc5-4617-9b96-971696af7c52.png +0 -0
  814. {kotonebot/kaa → kaa}/sprites/f6ca6bd3-543f-4779-8367-c5c883f04b95.png +0 -0
  815. /kotonebot/kaa/sprites/c107e00b-f94f-4526-88f5-2eae03a7d7f6.png → /kaa/sprites/f6f8e8b4-6426-43b0-b3e6-020401a1da3f.png +0 -0
  816. /kotonebot/kaa/sprites/395a07be-38b7-4c8c-948e-9efcb93a2e49.png → /kaa/sprites/f7f6a9d8-13cb-4c19-b43f-ca0e4b9176d5.png +0 -0
  817. /kotonebot/kaa/sprites/88456f07-23f0-48f7-ac81-206312717095.png → /kaa/sprites/f8b12dfa-bef8-41eb-a325-e7dd73c14124.png +0 -0
  818. /kotonebot/kaa/sprites/faeb1498-1c11-4bc7-8e85-864fd876751c.png → /kaa/sprites/f9a04314-15b1-41bb-9e7f-670d952973ce.png +0 -0
  819. {kotonebot/kaa → kaa}/sprites/fad5eec2-5fd5-412f-9abb-987a3087dc54.png +0 -0
  820. {kotonebot/kaa → kaa/tasks}/__init__.py +0 -0
  821. {kotonebot/kaa/resources → kaa/tasks/actions}/__init__.py +0 -0
  822. {kotonebot/kaa → kaa}/tasks/clear_logs.py +0 -0
  823. {kotonebot/kaa/sprites → kaa/tasks/daily}/__init__.py +0 -0
  824. {kotonebot/kaa/tasks → kaa/tasks/produce}/__init__.py +0 -0
  825. {kotonebot/kaa → kaa}/util/trace.py +0 -0
  826. {ksaa-2025.8.23.1.dist-info → ksaa-2025.9.dist-info}/WHEEL +0 -0
  827. {ksaa-2025.8.23.1.dist-info → ksaa-2025.9.dist-info}/licenses/LICENSE +0 -0
@@ -14,25 +14,26 @@ from typing import List, Dict, Tuple, Literal, Generator, Callable, Any, get_arg
14
14
  import cv2
15
15
  import gradio as gr
16
16
 
17
- from kotonebot.kaa.errors import ProduceSolutionNotFoundError
18
- from kotonebot.kaa.main import Kaa
19
- from kotonebot.kaa.db import IdolCard
17
+ from kaa.errors import ProduceSolutionNotFoundError
18
+ from kaa.main import Kaa
19
+ from kaa.db import IdolCard
20
20
  from kotonebot.backend.context.context import vars
21
21
  from kotonebot.errors import ContextNotInitializedError
22
22
  from kotonebot.client.host import Mumu12Host, LeidianHost
23
+ from kotonebot.client.host.mumu12_host import Mumu12V5Host
23
24
  from kotonebot.config.manager import load_config, save_config
24
25
  from kotonebot.config.base_config import UserConfig, BackendConfig
25
26
  from kotonebot.backend.context import task_registry, ContextStackVars
26
- from kotonebot.kaa.config import (
27
+ from kaa.config import (
27
28
  BaseConfig, APShopItems, CapsuleToysConfig, ClubRewardConfig, PurchaseConfig, ActivityFundsConfig,
28
29
  PresentsConfig, AssignmentConfig, ContestConfig, ProduceConfig,
29
30
  MissionRewardConfig, DailyMoneyShopItems, ProduceAction,
30
31
  RecommendCardDetectionMode, TraceConfig, StartGameConfig, EndGameConfig, UpgradeSupportCardConfig, MiscConfig,
31
32
  IdleModeConfig,
32
33
  )
33
- from kotonebot.kaa.config.produce import ProduceSolution, ProduceSolutionManager, ProduceData
34
- from kotonebot.kaa.application.adapter.misc_adapter import create_desktop_shortcut
35
- from kotonebot.kaa.application.core.idle_mode import IdleModeManager
34
+ from kaa.config.produce import ProduceSolution, ProduceSolutionManager, ProduceData
35
+ from kaa.application.adapter.misc_adapter import create_desktop_shortcut
36
+ from kaa.application.core.idle_mode import IdleModeManager
36
37
 
37
38
  logger = logging.getLogger(__name__)
38
39
  GradioInput = gr.Textbox | gr.Number | gr.Checkbox | gr.Dropdown | gr.Radio | gr.Slider | gr.Tabs | gr.Tab
@@ -42,7 +43,7 @@ ConfigKey = Literal[
42
43
  'screenshot_method', 'keep_screenshots',
43
44
  'check_emulator', 'emulator_path',
44
45
  'adb_emulator_name', 'emulator_args',
45
- '_mumu_index', '_leidian_index',
46
+ '_mumu_index', '_mumu12v5_index', '_leidian_index',
46
47
  'mumu_background_mode', 'target_screenshot_interval',
47
48
 
48
49
  # purchase
@@ -58,7 +59,7 @@ ConfigKey = Literal[
58
59
  'select_which_contestant', 'when_no_set',
59
60
 
60
61
  # produce
61
- 'produce_enabled', 'selected_solution_id', 'produce_count',
62
+ 'produce_enabled', 'selected_solution_id', 'produce_count', 'produce_timeout_cd',
62
63
  'mission_reward_enabled',
63
64
 
64
65
  # club reward
@@ -91,7 +92,7 @@ ConfigKey = Literal[
91
92
  'trace_recommend_card_detection',
92
93
 
93
94
  # misc
94
- 'check_update', 'auto_install_update', 'expose_to_lan',
95
+ 'check_update', 'auto_install_update', 'expose_to_lan', 'update_channel',
95
96
 
96
97
  # idle
97
98
  'idle_enabled', 'idle_seconds', 'idle_minimize_on_pause',
@@ -233,10 +234,22 @@ class KotoneBotUI:
233
234
  self.is_single_task_stopping: bool = False # 新增:标记单个任务是否正在停止
234
235
  self._kaa = kaa
235
236
  self._load_config()
236
- # 新增 IdleModeManager
237
+ # IdleModeManager 空闲检测
238
+ def safe_get_is_running():
239
+ try:
240
+ return (self.is_running or self.single_task_running) and not self.is_stopping and not self.is_single_task_stopping and not vars.flow.is_paused
241
+ except ContextNotInitializedError:
242
+ return False
243
+
244
+ def safe_get_is_paused():
245
+ try:
246
+ return vars.flow.is_paused
247
+ except ContextNotInitializedError:
248
+ return False
249
+
237
250
  self.idle_mgr = IdleModeManager(
238
- get_is_running=lambda: (self.is_running or self.single_task_running) and not self.is_stopping and not self.is_single_task_stopping and not vars.flow.is_paused,
239
- get_is_paused=lambda: vars.flow.is_paused,
251
+ get_is_running=safe_get_is_running,
252
+ get_is_paused=safe_get_is_paused,
240
253
  get_config=lambda: self.current_config.options.idle,
241
254
  )
242
255
  self._setup_kaa()
@@ -470,6 +483,7 @@ class KotoneBotUI:
470
483
 
471
484
  valid_screenshot_methods = {
472
485
  'mumu12': ['adb', 'adb_raw', 'uiautomator2', 'nemu_ipc'],
486
+ 'mumu12v5': ['adb', 'adb_raw', 'uiautomator2', 'nemu_ipc'],
473
487
  'leidian': ['adb', 'adb_raw', 'uiautomator2'],
474
488
  'custom': ['adb', 'adb_raw', 'uiautomator2'],
475
489
  'dmm': ['remote_windows', 'windows']
@@ -518,6 +532,13 @@ class KotoneBotUI:
518
532
 
519
533
  # 快速设置控制区域
520
534
  gr.Markdown("### 快速设置")
535
+
536
+ with gr.Row():
537
+ select_all_btn = gr.Button("全选", scale=1)
538
+ unselect_all_btn = gr.Button("清空", scale=1)
539
+ select_produce_only_btn = gr.Button("只选培育", scale=1)
540
+ unselect_produce_only_btn = gr.Button("只不选培育", scale=1)
541
+
521
542
  with gr.Row(elem_classes=["quick-controls-row"]):
522
543
  purchase_quick = gr.Checkbox(
523
544
  label="商店",
@@ -612,6 +633,8 @@ class KotoneBotUI:
612
633
  label="任务状态"
613
634
  )
614
635
 
636
+ # MARK: 状态 - 监听函数
637
+
615
638
  def on_run_click(evt: gr.EventData) -> Tuple[gr.Button, List[List[str]]]:
616
639
  result = self.toggle_run()
617
640
  # 如果正在停止,禁用按钮
@@ -623,43 +646,66 @@ class KotoneBotUI:
623
646
  return self.toggle_pause()
624
647
 
625
648
  # 快速设置控制的事件处理函数
626
- def save_quick_setting(field_name: str, value: bool, display_name: str):
649
+ def save_quick_setting(success_msg: str, failed_msg: str):
627
650
  """保存快速设置并立即应用"""
628
651
  try:
629
- # 更新配置
630
- if field_name == 'purchase':
631
- self.current_config.options.purchase.enabled = value
632
- elif field_name == 'assignment':
633
- self.current_config.options.assignment.enabled = value
634
- elif field_name == 'contest':
635
- self.current_config.options.contest.enabled = value
636
- elif field_name == 'produce':
637
- self.current_config.options.produce.enabled = value
638
- elif field_name == 'mission_reward':
639
- self.current_config.options.mission_reward.enabled = value
640
- elif field_name == 'club_reward':
641
- self.current_config.options.club_reward.enabled = value
642
- elif field_name == 'activity_funds':
643
- self.current_config.options.activity_funds.enabled = value
644
- elif field_name == 'presents':
645
- self.current_config.options.presents.enabled = value
646
- elif field_name == 'capsule_toys':
647
- self.current_config.options.capsule_toys.enabled = value
648
- elif field_name == 'upgrade_support_card':
649
- self.current_config.options.upgrade_support_card.enabled = value
650
- elif field_name == 'start_game':
651
- self.current_config.options.start_game.enabled = value
652
-
653
652
  # 保存配置
654
653
  save_config(self.config, "config.json")
655
654
 
656
655
  # 尝试热重载配置
657
656
  if self.reload_config():
658
- gr.Success(f"✓ {display_name} 已{'启用' if value else '禁用'}")
657
+ gr.Success(success_msg)
659
658
  else:
660
- gr.Warning(f"⚠ {display_name} 已保存,但重新加载失败")
659
+ gr.Warning(failed_msg)
661
660
  except Exception as e:
662
661
  gr.Error(f"✗ 保存失败:{str(e)}")
662
+
663
+ def update_and_save_quick_setting(field_name: str, value: bool, display_name: str):
664
+ """更新字段,并保存快速设置并立即应用"""
665
+
666
+ # 更新配置
667
+ if field_name == 'purchase':
668
+ self.current_config.options.purchase.enabled = value
669
+ elif field_name == 'assignment':
670
+ self.current_config.options.assignment.enabled = value
671
+ elif field_name == 'contest':
672
+ self.current_config.options.contest.enabled = value
673
+ elif field_name == 'produce':
674
+ self.current_config.options.produce.enabled = value
675
+ elif field_name == 'mission_reward':
676
+ self.current_config.options.mission_reward.enabled = value
677
+ elif field_name == 'club_reward':
678
+ self.current_config.options.club_reward.enabled = value
679
+ elif field_name == 'activity_funds':
680
+ self.current_config.options.activity_funds.enabled = value
681
+ elif field_name == 'presents':
682
+ self.current_config.options.presents.enabled = value
683
+ elif field_name == 'capsule_toys':
684
+ self.current_config.options.capsule_toys.enabled = value
685
+ elif field_name == 'upgrade_support_card':
686
+ self.current_config.options.upgrade_support_card.enabled = value
687
+
688
+ # 保存并重载配置
689
+ save_quick_setting(
690
+ f"✓ {display_name} 已{'启用' if value else '禁用'}",
691
+ f"⚠ {display_name} 已保存,但重新加载失败"
692
+ )
693
+
694
+ def batch_select(default: bool, produce_only: bool, success_msg: str) -> None:
695
+ self.current_config.options.purchase.enabled = default
696
+ self.current_config.options.assignment.enabled = default
697
+ self.current_config.options.contest.enabled = default
698
+ self.current_config.options.produce.enabled = produce_only
699
+ self.current_config.options.mission_reward.enabled = default
700
+ self.current_config.options.club_reward.enabled = default
701
+ self.current_config.options.activity_funds.enabled = default
702
+ self.current_config.options.presents.enabled = default
703
+ self.current_config.options.capsule_toys.enabled = default
704
+ self.current_config.options.upgrade_support_card.enabled = default
705
+
706
+ save_quick_setting(success_msg, f"⚠ 数据已保存,但重新加载失败")
707
+
708
+ # MARK: 状态 - UI回调函数
663
709
 
664
710
  run_btn.click(
665
711
  fn=on_run_click,
@@ -671,45 +717,67 @@ class KotoneBotUI:
671
717
  outputs=[pause_btn]
672
718
  )
673
719
 
720
+ select_all_btn.click(
721
+ fn=lambda: batch_select(True, True, f"✓ 全选成功"),
722
+ outputs=[]
723
+ )
724
+
725
+ unselect_all_btn.click(
726
+ fn=lambda: batch_select(False, False, f"✓ 清空成功"),
727
+ outputs=[]
728
+ )
729
+
730
+ select_produce_only_btn.click(
731
+ fn=lambda: batch_select(False, True, f"✓ 只选培育成功"),
732
+ outputs=[]
733
+ )
734
+
735
+ unselect_produce_only_btn.click(
736
+ fn=lambda: batch_select(True, False, f"✓ 只不选培育成功"),
737
+ outputs=[]
738
+ )
739
+
674
740
  # 绑定快速设置控制的事件
675
- purchase_quick.change(
676
- fn=lambda x: save_quick_setting('purchase', x, '商店'),
741
+
742
+ # 以下回调函数均由.change修改为.input,这样回调函数就只会在用户操作时触发,避免全选功能导致反复触发
743
+ purchase_quick.input(
744
+ fn=lambda x: update_and_save_quick_setting('purchase', x, '商店'),
677
745
  inputs=[purchase_quick]
678
746
  )
679
- assignment_quick.change(
680
- fn=lambda x: save_quick_setting('assignment', x, '工作'),
747
+ assignment_quick.input(
748
+ fn=lambda x: update_and_save_quick_setting('assignment', x, '工作'),
681
749
  inputs=[assignment_quick]
682
750
  )
683
- contest_quick.change(
684
- fn=lambda x: save_quick_setting('contest', x, '竞赛'),
751
+ contest_quick.input(
752
+ fn=lambda x: update_and_save_quick_setting('contest', x, '竞赛'),
685
753
  inputs=[contest_quick]
686
754
  )
687
- produce_quick.change(
688
- fn=lambda x: save_quick_setting('produce', x, '培育'),
755
+ produce_quick.input(
756
+ fn=lambda x: update_and_save_quick_setting('produce', x, '培育'),
689
757
  inputs=[produce_quick]
690
758
  )
691
- mission_reward_quick.change(
692
- fn=lambda x: save_quick_setting('mission_reward', x, '任务奖励'),
759
+ mission_reward_quick.input(
760
+ fn=lambda x: update_and_save_quick_setting('mission_reward', x, '任务奖励'),
693
761
  inputs=[mission_reward_quick]
694
762
  )
695
- club_reward_quick.change(
696
- fn=lambda x: save_quick_setting('club_reward', x, '社团奖励'),
763
+ club_reward_quick.input(
764
+ fn=lambda x: update_and_save_quick_setting('club_reward', x, '社团奖励'),
697
765
  inputs=[club_reward_quick]
698
766
  )
699
- activity_funds_quick.change(
700
- fn=lambda x: save_quick_setting('activity_funds', x, '活动费'),
767
+ activity_funds_quick.input(
768
+ fn=lambda x: update_and_save_quick_setting('activity_funds', x, '活动费'),
701
769
  inputs=[activity_funds_quick]
702
770
  )
703
- presents_quick.change(
704
- fn=lambda x: save_quick_setting('presents', x, '礼物'),
771
+ presents_quick.input(
772
+ fn=lambda x: update_and_save_quick_setting('presents', x, '礼物'),
705
773
  inputs=[presents_quick]
706
774
  )
707
- capsule_toys_quick.change(
708
- fn=lambda x: save_quick_setting('capsule_toys', x, '扭蛋'),
775
+ capsule_toys_quick.input(
776
+ fn=lambda x: update_and_save_quick_setting('capsule_toys', x, '扭蛋'),
709
777
  inputs=[capsule_toys_quick]
710
778
  )
711
- upgrade_support_card_quick.change(
712
- fn=lambda x: save_quick_setting('upgrade_support_card', x, '支援卡升级'),
779
+ upgrade_support_card_quick.input(
780
+ fn=lambda x: update_and_save_quick_setting('upgrade_support_card', x, '支援卡升级'),
713
781
  inputs=[upgrade_support_card_quick]
714
782
  )
715
783
 
@@ -788,46 +856,78 @@ class KotoneBotUI:
788
856
  with gr.Tab("任务"):
789
857
  gr.Markdown("## 执行任务")
790
858
 
791
- # 创建任务选择下拉框
792
- task_choices = [task.name for task in task_registry.values()]
793
- task_dropdown = gr.Dropdown(
794
- choices=task_choices,
795
- label="选择要执行的任务",
796
- info="选择一个要单独执行的任务",
797
- type="value",
798
- value=None
799
- )
800
-
801
- # 创建执行按钮和暂停按钮
859
+ # 第一行:统一的停止和暂停按钮
802
860
  with gr.Row():
803
- execute_btn = gr.Button("执行任务", scale=2)
861
+ stop_all_btn = gr.Button("停止任务", variant="stop", scale=1)
804
862
  pause_btn = gr.Button("暂停", scale=1)
863
+
805
864
  task_result = gr.Markdown("")
806
865
 
807
- def toggle_single_task(task_name: str) -> Tuple[gr.Button, str]:
866
+ # 获取所有任务并创建列表布局
867
+ tasks = list(task_registry.values())
868
+ task_buttons = [] # 存储所有任务按钮的引用
869
+
870
+ # 为每个任务创建一行:左侧启动按钮,右侧任务名
871
+ for task in tasks:
872
+ with gr.Row():
873
+ with gr.Column(scale=1, min_width=50):
874
+ task_btn = gr.Button("启动", variant="primary", size="sm")
875
+ task_buttons.append((task_btn, task.name))
876
+ with gr.Column(scale=7):
877
+ gr.Markdown(f"{task.name}")
878
+
879
+ # 事件处理函数
880
+ def start_single_task_by_name(task_name: str):
881
+ """启动指定任务并返回状态信息及所有按钮的更新状态"""
808
882
  if self.single_task_running:
809
- # 如果正在停止过程中,忽略重复点击
810
- if self.is_single_task_stopping:
811
- return gr.Button(value="停止中...", interactive=False), "正在停止任务..."
812
-
813
- result = self.stop_single_task()
814
- return gr.Button(value=result[0], interactive=False), result[1]
883
+ return ["已有任务正在运行"] + [gr.Button(interactive=False) for _ in task_buttons]
884
+
885
+ # 启动任务
886
+ result = self.start_single_task(task_name)
887
+ status_msg = result[1]
888
+
889
+ # 如果成功启动,禁用所有任务按钮
890
+ if self.single_task_running:
891
+ disabled_buttons = [gr.Button(value="运行中", interactive=False) for _ in task_buttons]
815
892
  else:
816
- result = self.start_single_task(task_name)
817
- return gr.Button(value=result[0], interactive=True), result[1]
893
+ disabled_buttons = [gr.Button(value="启动", interactive=True) for _ in task_buttons]
894
+
895
+ return [status_msg] + disabled_buttons
896
+
897
+ def stop_all_tasks():
898
+ """停止所有任务并重置按钮状态"""
899
+ if not self.single_task_running:
900
+ return ["没有正在运行的任务"] + [gr.Button(value="启动", interactive=True) for _ in task_buttons]
901
+
902
+ # 停止任务
903
+ result = self.stop_single_task()
904
+ status_msg = result[1]
905
+
906
+ # 如果正在停止中,显示停止中状态
907
+ if self.is_single_task_stopping:
908
+ disabled_buttons = [gr.Button(value="停止中", interactive=False) for _ in task_buttons]
909
+ else:
910
+ disabled_buttons = [gr.Button(value="启动", interactive=True) for _ in task_buttons]
911
+
912
+ return [status_msg] + disabled_buttons
818
913
 
819
- def get_task_button_status() -> gr.Button:
914
+ def get_task_buttons_status() -> List[gr.Button]:
915
+ """获取所有任务按钮的状态"""
820
916
  if not hasattr(self, 'run_status') or not self.run_status.running:
821
917
  self.single_task_running = False
822
- self.is_single_task_stopping = False # 重置停止状态
823
- return gr.Button(value="执行任务", interactive=True)
918
+ self.is_single_task_stopping = False
919
+ return [gr.Button(value="启动", interactive=True) for _ in task_buttons]
824
920
 
825
921
  if self.is_single_task_stopping:
826
- return gr.Button(value="停止中...", interactive=False) # 停止中时禁用按钮
922
+ return [gr.Button(value="停止中", interactive=False) for _ in task_buttons]
923
+
924
+ if self.single_task_running:
925
+ return [gr.Button(value="运行中", interactive=False) for _ in task_buttons]
827
926
 
828
- return gr.Button(value="停止任务", interactive=True)
927
+ return [gr.Button(value="启动", interactive=True) for _ in task_buttons]
829
928
 
830
929
  def get_single_task_status() -> str:
930
+ """获取任务状态信息"""
831
931
  if not hasattr(self, 'run_status'):
832
932
  return ""
833
933
 
@@ -858,15 +958,29 @@ class KotoneBotUI:
858
958
 
859
959
  return ""
860
960
 
861
- def on_pause_click(evt: gr.EventData) -> str:
961
+ def on_pause_click() -> str:
862
962
  return self.toggle_pause()
863
963
 
864
- execute_btn.click(
865
- fn=toggle_single_task,
866
- inputs=[task_dropdown],
867
- outputs=[execute_btn, task_result]
964
+ # 绑定事件 - 为每个任务按钮绑定点击事件
965
+ def create_task_handler(task_name: str):
966
+ """创建任务处理函数,避免闭包问题"""
967
+ def handler():
968
+ return start_single_task_by_name(task_name)
969
+ return handler
970
+
971
+ for task_btn, task_name in task_buttons:
972
+ task_btn.click(
973
+ fn=create_task_handler(task_name),
974
+ outputs=[task_result] + [btn for btn, _ in task_buttons]
975
+ )
976
+
977
+ # 绑定停止按钮事件
978
+ stop_all_btn.click(
979
+ fn=stop_all_tasks,
980
+ outputs=[task_result] + [btn for btn, _ in task_buttons]
868
981
  )
869
982
 
983
+ # 绑定暂停按钮事件
870
984
  pause_btn.click(
871
985
  fn=on_pause_click,
872
986
  outputs=[pause_btn]
@@ -874,8 +988,8 @@ class KotoneBotUI:
874
988
 
875
989
  # 添加定时器更新按钮状态和任务状态
876
990
  gr.Timer(1.0).tick(
877
- fn=get_task_button_status,
878
- outputs=[execute_btn]
991
+ fn=get_task_buttons_status,
992
+ outputs=[btn for btn, _ in task_buttons]
879
993
  )
880
994
  gr.Timer(1.0).tick(
881
995
  fn=self.get_pause_button_with_interactive,
@@ -901,8 +1015,8 @@ class KotoneBotUI:
901
1015
  return new_value
902
1016
 
903
1017
  with gr.Tabs(selected=self.current_config.backend.type):
904
- with gr.Tab("MuMu 12", id="mumu12") as tab_mumu12:
905
- gr.Markdown("已选中 MuMu 12 模拟器")
1018
+ with gr.Tab("MuMu 12 v4.x", id="mumu12") as tab_mumu12:
1019
+ gr.Markdown("已选中 MuMu 12 v4.x 模拟器")
906
1020
  mumu_refresh_message = gr.Markdown("<div style='color: red;'>点击下方「刷新」按钮载入信息</div>", visible=True)
907
1021
  mumu_instance = gr.Dropdown(
908
1022
  label="选择多开实例",
@@ -946,6 +1060,51 @@ class KotoneBotUI:
946
1060
  interactive=True
947
1061
  )
948
1062
 
1063
+ with gr.Tab("MuMu 12 v5.x", id="mumu12v5") as tab_mumu12v5:
1064
+ gr.Markdown("已选中 MuMu 12 v5.x 模拟器")
1065
+ mumu_refresh_message = gr.Markdown("<div style='color: red;'>点击下方「刷新」按钮载入信息</div>", visible=True)
1066
+ mumu_instance12v5 = gr.Dropdown(
1067
+ label="选择多开实例",
1068
+ choices=[],
1069
+ interactive=True
1070
+ )
1071
+ mumu_refresh_btn = gr.Button("刷新")
1072
+
1073
+ def refresh_mumu12v5_instances():
1074
+ try:
1075
+ instances = Mumu12V5Host.list()
1076
+ is_mumu12v5 = self.current_config.backend.type == 'mumu12v5'
1077
+ current_id = self.current_config.backend.instance_id if is_mumu12v5 else None
1078
+ choices = [(i.name, i.id) for i in instances]
1079
+ return gr.Dropdown(choices=choices, value=current_id, interactive=True), gr.Markdown(visible=False)
1080
+ except Exception as e:
1081
+ logger.exception('Failed to list installed MuMu12v5')
1082
+ gr.Error("获取 MuMu12 模拟器列表失败,请升级模拟器到最新版本。若问题依旧,前往 QQ 群、QQ 频道或 Github 反馈 bug。")
1083
+ return gr.Dropdown(choices=[], interactive=True), gr.Markdown(visible=True)
1084
+
1085
+ mumu_refresh_btn.click(
1086
+ fn=refresh_mumu12v5_instances,
1087
+ outputs=[mumu_instance12v5, mumu_refresh_message]
1088
+ )
1089
+
1090
+ # 如果当前是 MuMu 模拟器且有配置的 instance_id,立即加载实例列表
1091
+ if self.current_config.backend.type == 'mumu12v5' and self.current_config.backend.instance_id:
1092
+ try:
1093
+ instances = Mumu12V5Host.list()
1094
+ choices = [(i.name, i.id) for i in instances]
1095
+ mumu_instance12v5.choices = choices
1096
+ mumu_instance12v5.value = self.current_config.backend.instance_id
1097
+ mumu_refresh_message.visible = False
1098
+ except Exception as e:
1099
+ logger.exception('Failed to auto-load MuMu12v5 instances')
1100
+
1101
+ mumu_background_mode = gr.Checkbox(
1102
+ label="MuMu12v5 模拟器后台保活模式",
1103
+ value=self.current_config.backend.mumu_background_mode,
1104
+ info=BackendConfig.model_fields['mumu_background_mode'].description,
1105
+ interactive=True
1106
+ )
1107
+
949
1108
  with gr.Tab("雷电", id="leidian") as tab_leidian:
950
1109
  gr.Markdown("已选中雷电模拟器")
951
1110
  leidian_refresh_message = gr.Markdown("<div style='color: red;'>点击下方「刷新」按钮载入信息</div>", visible=True)
@@ -1035,6 +1194,7 @@ class KotoneBotUI:
1035
1194
 
1036
1195
  with gr.Tab("DMM", id="dmm") as tab_dmm:
1037
1196
  gr.Markdown("已选中 DMM")
1197
+ gr.Markdown("**暂停快捷键 <kbd>Ctrl</kbd> + <kbd>F4</kbd>,停止快捷键 <kbd>Ctrl</kbd> + <kbd>F3</kbd>**")
1038
1198
 
1039
1199
  choices = ['adb', 'adb_raw', 'uiautomator2', 'windows', 'remote_windows', 'nemu_ipc']
1040
1200
  screenshot_impl = gr.Dropdown(
@@ -1056,6 +1216,7 @@ class KotoneBotUI:
1056
1216
  )
1057
1217
 
1058
1218
  tab_mumu12.select(fn=partial(_update_emulator_tab_options, selected_index=0), inputs=[screenshot_impl], outputs=[screenshot_impl])
1219
+ tab_mumu12v5.select(fn=partial(_update_emulator_tab_options, selected_index=1), inputs=[screenshot_impl], outputs=[screenshot_impl])
1059
1220
  tab_leidian.select(fn=partial(_update_emulator_tab_options, selected_index=1), inputs=[screenshot_impl], outputs=[screenshot_impl])
1060
1221
  tab_custom.select(fn=partial(_update_emulator_tab_options, selected_index=2), inputs=[screenshot_impl], outputs=[screenshot_impl])
1061
1222
  tab_dmm.select(fn=partial(_update_emulator_tab_options, selected_index=3), inputs=[screenshot_impl], outputs=[screenshot_impl])
@@ -1066,21 +1227,26 @@ class KotoneBotUI:
1066
1227
  impl_value=self.current_config.backend.screenshot_impl,
1067
1228
  selected_index=0
1068
1229
  )
1069
- elif self.current_config.backend.type == 'leidian':
1230
+ elif self.current_config.backend.type == 'mumu12v5':
1070
1231
  _update_emulator_tab_options(
1071
1232
  impl_value=self.current_config.backend.screenshot_impl,
1072
1233
  selected_index=1
1073
1234
  )
1074
- elif self.current_config.backend.type == 'custom':
1235
+ elif self.current_config.backend.type == 'leidian':
1075
1236
  _update_emulator_tab_options(
1076
1237
  impl_value=self.current_config.backend.screenshot_impl,
1077
1238
  selected_index=2
1078
1239
  )
1079
- elif self.current_config.backend.type == 'dmm':
1240
+ elif self.current_config.backend.type == 'custom':
1080
1241
  _update_emulator_tab_options(
1081
1242
  impl_value=self.current_config.backend.screenshot_impl,
1082
1243
  selected_index=3
1083
1244
  )
1245
+ elif self.current_config.backend.type == 'dmm':
1246
+ _update_emulator_tab_options(
1247
+ impl_value=self.current_config.backend.screenshot_impl,
1248
+ selected_index=4
1249
+ )
1084
1250
  else:
1085
1251
  gr.Warning(f"未知的模拟器类型:{self.current_config.backend.type}")
1086
1252
 
@@ -1090,10 +1256,15 @@ class KotoneBotUI:
1090
1256
  self.current_config.backend.type = 'mumu12'
1091
1257
  self.current_config.backend.instance_id = data['_mumu_index']
1092
1258
  self.current_config.backend.mumu_background_mode = data['mumu_background_mode']
1093
- elif current_tab == 1: # Leidian
1259
+ elif current_tab == 1: # Mumu12v5
1260
+ # TODO: 由于 backend 类型放在了 Kotonebot 里,现在无法扩展,后续需要移出来
1261
+ self.current_config.backend.type = 'mumu12v5'
1262
+ self.current_config.backend.instance_id = data['_mumu12v5_index']
1263
+ self.current_config.backend.mumu_background_mode = data['mumu_background_mode']
1264
+ elif current_tab == 2: # Leidian
1094
1265
  self.current_config.backend.type = 'leidian'
1095
1266
  self.current_config.backend.instance_id = data['_leidian_index']
1096
- elif current_tab == 2: # Custom
1267
+ elif current_tab == 3: # Custom
1097
1268
  self.current_config.backend.type = 'custom'
1098
1269
  self.current_config.backend.instance_id = None
1099
1270
  self.current_config.backend.adb_ip = data['adb_ip']
@@ -1102,7 +1273,7 @@ class KotoneBotUI:
1102
1273
  self.current_config.backend.check_emulator = data['check_emulator']
1103
1274
  self.current_config.backend.emulator_path = data['emulator_path']
1104
1275
  self.current_config.backend.emulator_args = data['emulator_args']
1105
- elif current_tab == 3: # DMM
1276
+ elif current_tab == 4: # DMM
1106
1277
  self.current_config.backend.type = 'dmm'
1107
1278
  self.current_config.backend.instance_id = None # DMM doesn't use instance_id here
1108
1279
 
@@ -1121,6 +1292,7 @@ class KotoneBotUI:
1121
1292
  'emulator_args': emulator_args,
1122
1293
  '_mumu_index': mumu_instance,
1123
1294
  '_leidian_index': leidian_instance,
1295
+ '_mumu12v5_index': mumu_instance12v5,
1124
1296
  'mumu_background_mode': mumu_background_mode
1125
1297
  }
1126
1298
 
@@ -1351,6 +1523,14 @@ class KotoneBotUI:
1351
1523
  info=ProduceConfig.model_fields['produce_count'].description
1352
1524
  )
1353
1525
 
1526
+ produce_timeout_cd = gr.Number(
1527
+ minimum=20,
1528
+ value=self.current_config.options.produce.produce_timeout_cd,
1529
+ label="推荐卡检测用时上限",
1530
+ interactive=True,
1531
+ info=ProduceConfig.model_fields['produce_timeout_cd'].description
1532
+ )
1533
+
1354
1534
  # 绑定启用状态变化事件
1355
1535
  def on_produce_enabled_change(enabled):
1356
1536
  return gr.Group(visible=enabled)
@@ -1368,11 +1548,13 @@ class KotoneBotUI:
1368
1548
  config.produce.enabled = data['produce_enabled']
1369
1549
  config.produce.selected_solution_id = data.get('selected_solution_id')
1370
1550
  config.produce.produce_count = data.get('produce_count', 1)
1551
+ config.produce.produce_timeout_cd = data.get('produce_timeout_cd', 60)
1371
1552
 
1372
1553
  return set_config, {
1373
1554
  'produce_enabled': produce_enabled,
1374
1555
  'selected_solution_id': solution_dropdown,
1375
- 'produce_count': produce_count
1556
+ 'produce_count': produce_count,
1557
+ 'produce_timeout_cd': produce_timeout_cd
1376
1558
  }
1377
1559
 
1378
1560
 
@@ -1504,7 +1686,7 @@ class KotoneBotUI:
1504
1686
  (RecommendCardDetectionMode.STRICT.display_name, RecommendCardDetectionMode.STRICT.value)
1505
1687
  ],
1506
1688
  label="推荐卡检测模式",
1507
- info="推荐卡检测模式。严格模式下,识别速度会降低,但识别准确率会提高。",
1689
+ info="推荐卡检测模式。严格模式下,识别速度会降低,但识别准确率会提高。推荐Kotone使用严格模式,其他角色使用正常模式。",
1508
1690
  visible=False
1509
1691
  )
1510
1692
  use_ap_drink = gr.Checkbox(
@@ -1633,7 +1815,7 @@ class KotoneBotUI:
1633
1815
  ],
1634
1816
  value=current_solution.data.recommend_card_detection_mode.value,
1635
1817
  label="推荐卡检测模式",
1636
- info="推荐卡检测模式。严格模式下,识别速度会降低,但识别准确率会提高。"
1818
+ info="推荐卡检测模式。严格模式下,识别速度会降低,但识别准确率会提高。推荐Kotone使用严格模式,其他角色使用正常模式。"
1637
1819
  )
1638
1820
  use_ap_drink = gr.Checkbox(
1639
1821
  label="AP 不足时自动使用 AP 饮料",
@@ -2244,6 +2426,16 @@ class KotoneBotUI:
2244
2426
  info=MiscConfig.model_fields['expose_to_lan'].description,
2245
2427
  interactive=True
2246
2428
  )
2429
+ update_channel = gr.Dropdown(
2430
+ choices=[
2431
+ ("正式版", "release"),
2432
+ ("测试版", "beta")
2433
+ ],
2434
+ value=self.current_config.options.misc.update_channel,
2435
+ label="更新渠道",
2436
+ info=MiscConfig.model_fields['update_channel'].description,
2437
+ interactive=True
2438
+ )
2247
2439
  with gr.Row():
2248
2440
  gr.Button("创建桌面快捷方式").click(
2249
2441
  fn=self._create_shortcut_button_click(False),
@@ -2258,11 +2450,13 @@ class KotoneBotUI:
2258
2450
  config.misc.check_update = data['check_update']
2259
2451
  config.misc.auto_install_update = data['auto_install_update']
2260
2452
  config.misc.expose_to_lan = data['expose_to_lan']
2453
+ config.misc.update_channel = data['update_channel']
2261
2454
 
2262
2455
  return set_config, {
2263
2456
  'check_update': check_update,
2264
2457
  'auto_install_update': auto_install_update,
2265
- 'expose_to_lan': expose_to_lan
2458
+ 'expose_to_lan': expose_to_lan,
2459
+ 'update_channel': update_channel
2266
2460
  }
2267
2461
 
2268
2462
  def _create_shortcut_button_click(self, start_immediately: bool) -> Callable[[], None]:
@@ -2369,9 +2563,12 @@ class KotoneBotUI:
2369
2563
  # 社团奖励设置
2370
2564
  club_reward_settings = self._create_club_reward_settings()
2371
2565
 
2372
- # 升级支援卡设置
2566
+ # 扭蛋设置
2373
2567
  capsule_toys_settings = self._create_capsule_toys_settings()
2374
2568
 
2569
+ # 升级支援卡设置
2570
+ upgrade_support_card_settings = self._create_upgrade_support_card_settings()
2571
+
2375
2572
  # 启动游戏设置
2376
2573
  start_game_settings = self._create_start_game_settings()
2377
2574
 
@@ -2402,6 +2599,7 @@ class KotoneBotUI:
2402
2599
  mission_reward_settings,
2403
2600
  club_reward_settings,
2404
2601
  capsule_toys_settings,
2602
+ upgrade_support_card_settings,
2405
2603
  start_game_settings,
2406
2604
  end_game_settings,
2407
2605
  misc_settings,
@@ -2454,7 +2652,7 @@ class KotoneBotUI:
2454
2652
 
2455
2653
  # 更新日志
2456
2654
  with gr.Accordion("更新日志", open=False):
2457
- from kotonebot.kaa.metadata import WHATS_NEW
2655
+ from kaa.metadata import WHATS_NEW
2458
2656
  gr.Markdown(WHATS_NEW)
2459
2657
 
2460
2658
  # 载入信息按钮
@@ -2478,7 +2676,63 @@ class KotoneBotUI:
2478
2676
  def list_all_versions():
2479
2677
  """列出所有可用版本"""
2480
2678
  import logging
2679
+ import re
2481
2680
  logger = logging.getLogger(__name__)
2681
+
2682
+ # 检查启动器版本
2683
+ def check_launcher_version():
2684
+ """通过读取bootstrap.pyz/meta.py获取启动器版本"""
2685
+ import zipfile
2686
+ try:
2687
+ bootstrap_path = os.path.join(os.getcwd(), "bootstrap.pyz")
2688
+ if not os.path.exists(bootstrap_path):
2689
+ logger.warning("启动器文件不存在")
2690
+ gr.Warning("启动器文件不存在")
2691
+ return None
2692
+
2693
+ # 尝试从bootstrap.pyz中读取meta.py
2694
+ try:
2695
+ with zipfile.ZipFile(bootstrap_path, 'r') as zip_file:
2696
+ if 'meta.py' in zip_file.namelist():
2697
+ # 读取meta.py内容
2698
+ meta_content = zip_file.read('meta.py').decode('utf-8')
2699
+
2700
+ # 创建一个安全的执行环境
2701
+ exec_globals = {}
2702
+ exec_locals = {}
2703
+
2704
+ # 执行meta.py内容
2705
+ exec(meta_content, exec_globals, exec_locals)
2706
+
2707
+ # 获取VERSION变量
2708
+ if 'VERSION' in exec_locals:
2709
+ version = exec_locals['VERSION']
2710
+ # 移除v前缀(如果有)
2711
+ if isinstance(version, str) and version.startswith('v'):
2712
+ version = version[1:]
2713
+ logger.info(f"从meta.py读取到启动器版本: {version}")
2714
+ return str(version)
2715
+ else:
2716
+ logger.warning("meta.py中未找到VERSION变量")
2717
+ gr.Warning("meta.py中未找到VERSION变量")
2718
+ return None
2719
+ else:
2720
+ logger.warning("bootstrap.pyz中未找到meta.py文件")
2721
+ gr.Warning("bootstrap.pyz中未找到meta.py文件")
2722
+ return None
2723
+ except zipfile.BadZipFile:
2724
+ # 不是有效的zip文件,可能是旧版本启动器
2725
+ logger.info("bootstrap.pyz不是有效的zip文件,判断为旧版本启动器")
2726
+ return "0.4.x"
2727
+ except Exception as e:
2728
+ logger.warning(f"读取bootstrap.pyz失败: {str(e)}")
2729
+ gr.Warning(f"读取bootstrap.pyz失败: {str(e)}")
2730
+ return None
2731
+
2732
+ except Exception as e:
2733
+ logger.warning(f"检查启动器版本失败: {str(e)}")
2734
+ gr.Warning(f"检查启动器版本失败: {str(e)}")
2735
+ return None
2482
2736
 
2483
2737
  try:
2484
2738
  # 构建命令,使用清华镜像源
@@ -2544,12 +2798,22 @@ class KotoneBotUI:
2544
2798
  gr.Button(visible=False)
2545
2799
  )
2546
2800
 
2801
+ # 检查启动器版本
2802
+ launcher_version = check_launcher_version()
2803
+
2547
2804
  # 构建状态信息
2548
2805
  status_info = []
2549
2806
  if installed_version:
2550
2807
  status_info.append(f"**当前安装版本:** {installed_version}")
2551
2808
  if latest_version:
2552
2809
  status_info.append(f"**最新版本:** {latest_version}")
2810
+ if launcher_version:
2811
+ if launcher_version == "0.4.x":
2812
+ status_info.append(f"**启动器版本:** < v0.5.0 (旧版本)")
2813
+ else:
2814
+ status_info.append(f"**启动器版本:** v{launcher_version}")
2815
+ else:
2816
+ status_info.append(f"**启动器版本:** 未知")
2553
2817
  status_info.append(f"**找到 {len(versions)} 个可用版本**")
2554
2818
 
2555
2819
  status_message = "\n\n".join(status_info)
@@ -2587,12 +2851,130 @@ class KotoneBotUI:
2587
2851
  import logging
2588
2852
  import threading
2589
2853
  import time
2854
+ import re
2590
2855
  logger = logging.getLogger(__name__)
2591
2856
 
2592
2857
  if not selected_version:
2593
2858
  error_msg = "请先选择一个版本"
2594
2859
  logger.warning(error_msg)
2595
2860
  return error_msg
2861
+
2862
+
2863
+ def compare_version(version1: str, version2: str) -> int:
2864
+ """比较版本号,返回-1(v1<v2), 0(v1==v2), 1(v1>v2)"""
2865
+ # 处理特殊标记
2866
+ if version1 == "0.4.x":
2867
+ version1 = "0.4.0"
2868
+
2869
+ def parse_version(v):
2870
+ # 移除v前缀并解析版本号和预发布标识
2871
+ v = v.lstrip('v')
2872
+ if 'b' in v:
2873
+ base, beta = v.split('b', 1)
2874
+ return tuple(map(int, base.split('.'))) + (-1, int(beta))
2875
+ elif 'a' in v:
2876
+ base, alpha = v.split('a', 1)
2877
+ return tuple(map(int, base.split('.'))) + (-2, int(alpha))
2878
+ elif 'rc' in v:
2879
+ base, rc = v.split('rc', 1)
2880
+ return tuple(map(int, base.split('.'))) + (-0.5, int(rc))
2881
+ else:
2882
+ return tuple(map(int, v.split('.'))) + (0, 0)
2883
+
2884
+ v1_parsed = parse_version(version1)
2885
+ v2_parsed = parse_version(version2)
2886
+
2887
+ if v1_parsed < v2_parsed:
2888
+ return -1
2889
+ elif v1_parsed > v2_parsed:
2890
+ return 1
2891
+ else:
2892
+ return 0
2893
+
2894
+ # 检查启动器版本进行兼容性验证
2895
+ def check_launcher_version_simple():
2896
+ """通过读取bootstrap.pyz/meta.py获取启动器版本"""
2897
+ import zipfile
2898
+ try:
2899
+ bootstrap_path = os.path.join(os.getcwd(), "bootstrap.pyz")
2900
+ if not os.path.exists(bootstrap_path):
2901
+ logger.warning("启动器文件不存在")
2902
+ gr.Warning("启动器文件不存在")
2903
+ return None
2904
+
2905
+ # 尝试从bootstrap.pyz中读取meta.py
2906
+ try:
2907
+ with zipfile.ZipFile(bootstrap_path, 'r') as zip_file:
2908
+ if 'meta.py' in zip_file.namelist():
2909
+ # 读取meta.py内容
2910
+ meta_content = zip_file.read('meta.py').decode('utf-8')
2911
+
2912
+ # 创建一个安全的执行环境
2913
+ exec_globals = {}
2914
+ exec_locals = {}
2915
+
2916
+ # 执行meta.py内容
2917
+ exec(meta_content, exec_globals, exec_locals)
2918
+
2919
+ # 获取VERSION变量
2920
+ if 'VERSION' in exec_locals:
2921
+ version = exec_locals['VERSION']
2922
+ # 移除v前缀(如果有)
2923
+ if isinstance(version, str) and version.startswith('v'):
2924
+ version = version[1:]
2925
+ logger.info(f"从meta.py读取到启动器版本: {version}")
2926
+ return str(version)
2927
+ else:
2928
+ logger.warning("meta.py中未找到VERSION变量")
2929
+ gr.Warning("meta.py中未找到VERSION变量")
2930
+ return None
2931
+ else:
2932
+ logger.warning("bootstrap.pyz中未找到meta.py文件")
2933
+ gr.Warning("bootstrap.pyz中未找到meta.py文件")
2934
+ return None
2935
+ except zipfile.BadZipFile:
2936
+ # 不是有效的zip文件,可能是旧版本启动器
2937
+ logger.info("bootstrap.pyz不是有效的zip文件,判断为旧版本启动器")
2938
+ return "0.4.x"
2939
+ except Exception as e:
2940
+ logger.warning(f"读取bootstrap.pyz失败: {str(e)}")
2941
+ gr.Warning(f"读取bootstrap.pyz失败: {str(e)}")
2942
+ return None
2943
+
2944
+ except Exception as e:
2945
+ logger.warning(f"检查启动器版本失败: {str(e)}")
2946
+ gr.Warning(f"检查启动器版本失败: {str(e)}")
2947
+ return None
2948
+
2949
+ # 执行启动器版本检查
2950
+ launcher_version = check_launcher_version_simple()
2951
+ logger.info(f"检测到启动器版本: {launcher_version}")
2952
+
2953
+ # 版本兼容性检查
2954
+ if launcher_version:
2955
+ if compare_version(launcher_version, "0.5.0") < 0:
2956
+ # 启动器版本低于0.5.0
2957
+ logger.warning(f"启动器版本 {launcher_version} 低于 v0.5.0")
2958
+
2959
+ # 检查要安装的版本是否 >= v2025.9b1
2960
+ if compare_version(selected_version, "2025.9b1") >= 0:
2961
+ error_msg = (
2962
+ f"❌ 版本兼容性错误\n\n"
2963
+ f"启动器版本: {launcher_version}\n"
2964
+ f"要安装的版本: {selected_version}\n\n"
2965
+ f"v2025.9b1 及以上版本需要**启动器 v0.5.0*** 或更高版本支持。\n"
2966
+ f"请先升级启动器到 v0.5.0 以上版本。[查看帮助](https://www.kdocs.cn/l/cetCY8mGKHLj?linkname=UhPH1itaSv)"
2967
+ )
2968
+ logger.error(error_msg)
2969
+ return error_msg
2970
+ else:
2971
+ # 版本兼容,但给出警告
2972
+ logger.warning(f"启动器版本较低,建议升级到 v0.5.0 以上")
2973
+ gr.Warning("启动器版本较低,建议升级到 v0.5.0 以上")
2974
+ else:
2975
+ # 无法获取启动器版本,给出警告但继续
2976
+ logger.warning("无法获取启动器版本,可以继续安装但可能存在兼容性问题")
2977
+ gr.Warning("无法获取启动器版本,可以继续安装但可能存在兼容性问题")
2596
2978
 
2597
2979
  def install_and_exit():
2598
2980
  """在后台线程中执行安装并退出程序"""
@@ -2613,9 +2995,6 @@ class KotoneBotUI:
2613
2995
  creationflags=subprocess.CREATE_NEW_CONSOLE if os.name == 'nt' else 0
2614
2996
  )
2615
2997
 
2616
- # 等待一小段时间确保启动器启动
2617
- time.sleep(2)
2618
-
2619
2998
  # 退出当前程序
2620
2999
  logger.info("安装即将开始,正在退出当前程序...")
2621
3000
  os._exit(0)