ksaa 2025.5.2.2__py3-none-any.whl → 2025.5.16.1__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 (598) hide show
  1. kotonebot/backend/bot.py +15 -50
  2. kotonebot/backend/context/context.py +10 -8
  3. kotonebot/backend/debug/server.py +1 -2
  4. kotonebot/backend/ocr.py +34 -20
  5. kotonebot/debug_entry.py +1 -1
  6. kotonebot/{tasks → kaa}/common.py +5 -4
  7. kotonebot/{tasks → kaa}/db/sqlite.py +1 -1
  8. kotonebot/{tasks → kaa}/game_ui/common.py +0 -7
  9. kotonebot/{tasks → kaa}/game_ui/commu_event_buttons.py +1 -1
  10. kotonebot/{tasks → kaa}/game_ui/dialog.py +1 -1
  11. kotonebot/{tasks → kaa}/game_ui/idols_overview.py +8 -14
  12. kotonebot/{tasks → kaa}/game_ui/toolbar.py +1 -1
  13. kotonebot/{tasks → kaa}/image_db/db.py +1 -1
  14. kotonebot/{tasks → kaa}/main/cli.py +23 -6
  15. kotonebot/{tasks → kaa}/main/gr.py +5 -5
  16. kotonebot/kaa/main/kaa.py +93 -0
  17. kotonebot/{tasks → kaa}/metadata.py +23 -0
  18. kotonebot/kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
  19. kotonebot/{tasks → kaa}/resources/game.db +0 -0
  20. kotonebot/kaa/resources/game_ver.txt +0 -0
  21. kotonebot/kaa/resources/idol_cards/i_card-skin-amao-3-005_1.png +0 -0
  22. kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-1-000_0.png +0 -0
  23. kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-1-000_1.png +0 -0
  24. kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-2-000_0.png +0 -0
  25. kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-2-000_1.png +0 -0
  26. kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-3-000_0.png +0 -0
  27. kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-3-000_1.png +0 -0
  28. kotonebot/kaa/tasks/R.py +558 -0
  29. kotonebot/{tasks → kaa/tasks}/actions/commu.py +4 -4
  30. kotonebot/{tasks → kaa/tasks}/actions/loading.py +2 -2
  31. kotonebot/{tasks → kaa/tasks}/actions/scenes.py +4 -4
  32. kotonebot/{tasks → kaa/tasks}/actions/stats.py +2 -2
  33. kotonebot/{tasks → kaa/tasks}/daily/acquire_activity_funds.py +2 -2
  34. kotonebot/{tasks → kaa/tasks}/daily/acquire_presents.py +2 -2
  35. kotonebot/{tasks → kaa/tasks}/daily/assignment.py +2 -3
  36. kotonebot/{tasks → kaa/tasks}/daily/capsule_toys.py +3 -3
  37. kotonebot/{tasks → kaa/tasks}/daily/club_reward.py +3 -3
  38. kotonebot/{tasks → kaa/tasks}/daily/contest.py +3 -3
  39. kotonebot/{tasks → kaa/tasks}/daily/mission_reward.py +2 -2
  40. kotonebot/{tasks → kaa/tasks}/daily/purchase.py +4 -5
  41. kotonebot/{tasks → kaa/tasks}/daily/upgrade_support_card.py +3 -3
  42. kotonebot/{tasks → kaa/tasks}/end_game.py +1 -1
  43. kotonebot/kaa/tasks/produce/__init__.py +0 -0
  44. kotonebot/{tasks → kaa/tasks}/produce/cards.py +6 -7
  45. kotonebot/{tasks → kaa/tasks}/produce/common.py +5 -5
  46. kotonebot/{tasks → kaa/tasks}/produce/in_purodyuusu.py +6 -6
  47. kotonebot/{tasks → kaa/tasks}/produce/non_lesson_actions.py +4 -5
  48. kotonebot/{tasks → kaa/tasks}/produce/p_drink.py +1 -1
  49. kotonebot/{tasks → kaa/tasks}/produce/produce.py +8 -8
  50. kotonebot/{tasks → kaa/tasks}/start_game.py +2 -2
  51. kotonebot/{tasks → kaa}/util/paths.py +1 -1
  52. kotonebot/primitives/__init__.py +0 -0
  53. {ksaa-2025.5.2.2.dist-info → ksaa-2025.5.16.1.dist-info}/METADATA +44 -22
  54. ksaa-2025.5.16.1.dist-info/RECORD +637 -0
  55. {ksaa-2025.5.2.2.dist-info → ksaa-2025.5.16.1.dist-info}/WHEEL +1 -1
  56. ksaa-2025.5.16.1.dist-info/entry_points.txt +2 -0
  57. kotonebot/tasks/R.py +0 -558
  58. kotonebot/tasks/main/kaa.py +0 -43
  59. kotonebot/tasks/resources/__pycache__/__init__.cpython-310.pyc +0 -0
  60. kotonebot/tasks/resources/game_ver.txt +0 -0
  61. kotonebot/tasks/resources/idol_cards/i_card-skin-amao-3-005_1.png +0 -0
  62. ksaa-2025.5.2.2.dist-info/RECORD +0 -629
  63. ksaa-2025.5.2.2.dist-info/entry_points.txt +0 -2
  64. /kotonebot/{tasks → kaa}/__init__.py +0 -0
  65. /kotonebot/{tasks → kaa}/clear_logs.py +0 -0
  66. /kotonebot/{tasks → kaa}/db/__init__.py +0 -0
  67. /kotonebot/{tasks → kaa}/db/constants.py +0 -0
  68. /kotonebot/{tasks → kaa}/db/idol_card.py +0 -0
  69. /kotonebot/{tasks → kaa}/game_ui/__init__.py +0 -0
  70. /kotonebot/{tasks → kaa}/game_ui/badge.py +0 -0
  71. /kotonebot/{tasks → kaa}/game_ui/scrollable.py +0 -0
  72. /kotonebot/{tasks → kaa}/image_db/__init__.py +0 -0
  73. /kotonebot/{tasks → kaa}/image_db/descriptors/__init__.py +0 -0
  74. /kotonebot/{tasks → kaa}/image_db/descriptors/hist.py +0 -0
  75. /kotonebot/{tasks → kaa}/main/__init__.py +0 -0
  76. /kotonebot/{tasks/actions → kaa/resources}/__init__.py +0 -0
  77. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-1-000_0.png +0 -0
  78. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-1-000_1.png +0 -0
  79. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-1-001_0.png +0 -0
  80. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-1-001_1.png +0 -0
  81. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-2-000_0.png +0 -0
  82. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-2-000_1.png +0 -0
  83. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-000_0.png +0 -0
  84. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-000_1.png +0 -0
  85. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-001_0.png +0 -0
  86. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-001_1.png +0 -0
  87. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-002_0.png +0 -0
  88. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-002_1.png +0 -0
  89. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-003_0.png +0 -0
  90. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-003_1.png +0 -0
  91. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-005_0.png +0 -0
  92. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-006_0.png +0 -0
  93. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-006_1.png +0 -0
  94. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-007_0.png +0 -0
  95. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-007_1.png +0 -0
  96. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-008_0.png +0 -0
  97. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-008_1.png +0 -0
  98. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-009_0.png +0 -0
  99. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-009_1.png +0 -0
  100. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-010_0.png +0 -0
  101. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-010_1.png +0 -0
  102. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-011_0.png +0 -0
  103. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-amao-3-011_1.png +0 -0
  104. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-1-000_0.png +0 -0
  105. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-1-000_1.png +0 -0
  106. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-1-001_0.png +0 -0
  107. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-1-001_1.png +0 -0
  108. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-2-000_0.png +0 -0
  109. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-2-000_1.png +0 -0
  110. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-000_0.png +0 -0
  111. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-000_1.png +0 -0
  112. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-001_0.png +0 -0
  113. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-001_1.png +0 -0
  114. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-002_0.png +0 -0
  115. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-002_1.png +0 -0
  116. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-003_0.png +0 -0
  117. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-003_1.png +0 -0
  118. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-005_0.png +0 -0
  119. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-005_1.png +0 -0
  120. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-006_0.png +0 -0
  121. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-006_1.png +0 -0
  122. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-007_0.png +0 -0
  123. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-007_1.png +0 -0
  124. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-008_0.png +0 -0
  125. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-008_1.png +0 -0
  126. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-009_0.png +0 -0
  127. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-009_1.png +0 -0
  128. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-010_0.png +0 -0
  129. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-010_1.png +0 -0
  130. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-011_0.png +0 -0
  131. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-011_1.png +0 -0
  132. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-012_0.png +0 -0
  133. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-fktn-3-012_1.png +0 -0
  134. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-1-000_0.png +0 -0
  135. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-1-000_1.png +0 -0
  136. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-1-001_0.png +0 -0
  137. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-1-001_1.png +0 -0
  138. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-2-000_0.png +0 -0
  139. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-2-000_1.png +0 -0
  140. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-000_0.png +0 -0
  141. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-000_1.png +0 -0
  142. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-001_0.png +0 -0
  143. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-001_1.png +0 -0
  144. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-002_0.png +0 -0
  145. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-002_1.png +0 -0
  146. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-003_0.png +0 -0
  147. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-003_1.png +0 -0
  148. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-004_0.png +0 -0
  149. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-004_1.png +0 -0
  150. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-005_0.png +0 -0
  151. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-005_1.png +0 -0
  152. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-006_0.png +0 -0
  153. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-006_1.png +0 -0
  154. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-007_0.png +0 -0
  155. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-007_1.png +0 -0
  156. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-008_0.png +0 -0
  157. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-008_1.png +0 -0
  158. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-009_0.png +0 -0
  159. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-009_1.png +0 -0
  160. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-010_0.png +0 -0
  161. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-010_1.png +0 -0
  162. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-011_0.png +0 -0
  163. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hrnm-3-011_1.png +0 -0
  164. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-1-000_0.png +0 -0
  165. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-1-000_1.png +0 -0
  166. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-1-001_0.png +0 -0
  167. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-1-001_1.png +0 -0
  168. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-2-000_0.png +0 -0
  169. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-2-000_1.png +0 -0
  170. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-000_0.png +0 -0
  171. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-000_1.png +0 -0
  172. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-001_0.png +0 -0
  173. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-001_1.png +0 -0
  174. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-002_0.png +0 -0
  175. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-002_1.png +0 -0
  176. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-003_0.png +0 -0
  177. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-003_1.png +0 -0
  178. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-005_0.png +0 -0
  179. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-005_1.png +0 -0
  180. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-006_0.png +0 -0
  181. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-006_1.png +0 -0
  182. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-007_0.png +0 -0
  183. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-007_1.png +0 -0
  184. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-008_0.png +0 -0
  185. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-008_1.png +0 -0
  186. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-009_0.png +0 -0
  187. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-009_1.png +0 -0
  188. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-010_0.png +0 -0
  189. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-010_1.png +0 -0
  190. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-011_0.png +0 -0
  191. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-011_1.png +0 -0
  192. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-012_0.png +0 -0
  193. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hski-3-012_1.png +0 -0
  194. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-1-000_0.png +0 -0
  195. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-1-000_1.png +0 -0
  196. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-2-000_0.png +0 -0
  197. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-2-000_1.png +0 -0
  198. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-3-000_0.png +0 -0
  199. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-3-000_1.png +0 -0
  200. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-3-001_0.png +0 -0
  201. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-3-001_1.png +0 -0
  202. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-3-002_0.png +0 -0
  203. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-3-002_1.png +0 -0
  204. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-3-004_0.png +0 -0
  205. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-3-004_1.png +0 -0
  206. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-3-005_0.png +0 -0
  207. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-3-005_1.png +0 -0
  208. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-3-006_0.png +0 -0
  209. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-3-006_1.png +0 -0
  210. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-3-011_0.png +0 -0
  211. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-hume-3-011_1.png +0 -0
  212. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-1-000_0.png +0 -0
  213. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-1-000_1.png +0 -0
  214. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-2-000_0.png +0 -0
  215. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-2-000_1.png +0 -0
  216. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-3-000_0.png +0 -0
  217. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-3-000_1.png +0 -0
  218. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-3-002_0.png +0 -0
  219. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-3-002_1.png +0 -0
  220. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-3-003_0.png +0 -0
  221. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-3-003_1.png +0 -0
  222. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-3-004_0.png +0 -0
  223. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-3-004_1.png +0 -0
  224. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-3-005_0.png +0 -0
  225. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-3-005_1.png +0 -0
  226. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-3-006_0.png +0 -0
  227. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-3-006_1.png +0 -0
  228. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-3-010_0.png +0 -0
  229. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-jsna-3-010_1.png +0 -0
  230. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-1-000_0.png +0 -0
  231. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-1-000_1.png +0 -0
  232. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-1-001_0.png +0 -0
  233. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-1-001_1.png +0 -0
  234. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-2-000_0.png +0 -0
  235. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-2-000_1.png +0 -0
  236. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-000_0.png +0 -0
  237. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-000_1.png +0 -0
  238. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-001_0.png +0 -0
  239. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-001_1.png +0 -0
  240. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-002_0.png +0 -0
  241. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-002_1.png +0 -0
  242. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-003_0.png +0 -0
  243. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-003_1.png +0 -0
  244. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-004_0.png +0 -0
  245. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-004_1.png +0 -0
  246. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-005_0.png +0 -0
  247. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-005_1.png +0 -0
  248. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-006_0.png +0 -0
  249. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-006_1.png +0 -0
  250. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-007_0.png +0 -0
  251. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-007_1.png +0 -0
  252. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-008_0.png +0 -0
  253. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-008_1.png +0 -0
  254. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-009_0.png +0 -0
  255. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-009_1.png +0 -0
  256. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-010_0.png +0 -0
  257. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-010_1.png +0 -0
  258. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-011_0.png +0 -0
  259. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kcna-3-011_1.png +0 -0
  260. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-1-000_0.png +0 -0
  261. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-1-000_1.png +0 -0
  262. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-1-001_0.png +0 -0
  263. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-1-001_1.png +0 -0
  264. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-2-000_0.png +0 -0
  265. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-2-000_1.png +0 -0
  266. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-000_0.png +0 -0
  267. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-000_1.png +0 -0
  268. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-001_0.png +0 -0
  269. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-001_1.png +0 -0
  270. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-002_0.png +0 -0
  271. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-002_1.png +0 -0
  272. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-004_0.png +0 -0
  273. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-004_1.png +0 -0
  274. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-005_0.png +0 -0
  275. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-005_1.png +0 -0
  276. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-006_0.png +0 -0
  277. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-006_1.png +0 -0
  278. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-007_0.png +0 -0
  279. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-007_1.png +0 -0
  280. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-008_0.png +0 -0
  281. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-008_1.png +0 -0
  282. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-009_0.png +0 -0
  283. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-009_1.png +0 -0
  284. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-010_0.png +0 -0
  285. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-010_1.png +0 -0
  286. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-011_0.png +0 -0
  287. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-kllj-3-011_1.png +0 -0
  288. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-1-000_0.png +0 -0
  289. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-1-000_1.png +0 -0
  290. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-1-001_0.png +0 -0
  291. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-1-001_1.png +0 -0
  292. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-2-000_0.png +0 -0
  293. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-2-000_1.png +0 -0
  294. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-000_0.png +0 -0
  295. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-000_1.png +0 -0
  296. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-001_0.png +0 -0
  297. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-001_1.png +0 -0
  298. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-002_0.png +0 -0
  299. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-002_1.png +0 -0
  300. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-003_0.png +0 -0
  301. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-003_1.png +0 -0
  302. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-004_0.png +0 -0
  303. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-004_1.png +0 -0
  304. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-006_0.png +0 -0
  305. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-006_1.png +0 -0
  306. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-007_0.png +0 -0
  307. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-007_1.png +0 -0
  308. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-008_0.png +0 -0
  309. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-008_1.png +0 -0
  310. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-009_0.png +0 -0
  311. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-009_1.png +0 -0
  312. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-010_0.png +0 -0
  313. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-010_1.png +0 -0
  314. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-011_0.png +0 -0
  315. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-shro-3-011_1.png +0 -0
  316. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-1-000_0.png +0 -0
  317. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-1-000_1.png +0 -0
  318. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-1-001_0.png +0 -0
  319. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-1-001_1.png +0 -0
  320. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-2-000_0.png +0 -0
  321. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-2-000_1.png +0 -0
  322. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-000_0.png +0 -0
  323. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-000_1.png +0 -0
  324. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-001_0.png +0 -0
  325. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-001_1.png +0 -0
  326. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-002_0.png +0 -0
  327. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-002_1.png +0 -0
  328. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-003_0.png +0 -0
  329. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-003_1.png +0 -0
  330. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-005_0.png +0 -0
  331. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-005_1.png +0 -0
  332. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-006_0.png +0 -0
  333. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-006_1.png +0 -0
  334. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-007_0.png +0 -0
  335. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-007_1.png +0 -0
  336. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-008_0.png +0 -0
  337. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-008_1.png +0 -0
  338. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-009_0.png +0 -0
  339. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-009_1.png +0 -0
  340. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-010_0.png +0 -0
  341. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-010_1.png +0 -0
  342. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-011_0.png +0 -0
  343. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ssmk-3-011_1.png +0 -0
  344. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-1-000_0.png +0 -0
  345. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-1-000_1.png +0 -0
  346. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-1-001_0.png +0 -0
  347. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-1-001_1.png +0 -0
  348. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-2-000_0.png +0 -0
  349. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-2-000_1.png +0 -0
  350. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-000_0.png +0 -0
  351. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-000_1.png +0 -0
  352. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-001_0.png +0 -0
  353. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-001_1.png +0 -0
  354. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-002_0.png +0 -0
  355. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-002_1.png +0 -0
  356. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-003_0.png +0 -0
  357. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-003_1.png +0 -0
  358. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-004_0.png +0 -0
  359. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-004_1.png +0 -0
  360. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-006_0.png +0 -0
  361. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-006_1.png +0 -0
  362. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-007_0.png +0 -0
  363. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-007_1.png +0 -0
  364. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-008_0.png +0 -0
  365. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-008_1.png +0 -0
  366. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-009_0.png +0 -0
  367. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-009_1.png +0 -0
  368. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-010_0.png +0 -0
  369. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-010_1.png +0 -0
  370. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-011_0.png +0 -0
  371. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-011_1.png +0 -0
  372. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-012_0.png +0 -0
  373. /kotonebot/{tasks → kaa}/resources/idol_cards/i_card-skin-ttmr-3-012_1.png +0 -0
  374. /kotonebot/{tasks → kaa}/sprites/00551158-fee9-483f-b034-549139a96f58.png +0 -0
  375. /kotonebot/{tasks/sprites/709e9968-12f2-4969-9392-f7f9fa8d961b.png → kaa/sprites/027dd54f-09d8-452d-8eff-66b06aecd264.png} +0 -0
  376. /kotonebot/{tasks/sprites/2030f5bf-6a20-4e95-8978-731411d8c3ea.png → kaa/sprites/02e69560-ec42-4453-b771-8600b5726b93.png} +0 -0
  377. /kotonebot/{tasks/sprites/23a56799-9280-4676-84f0-68308e7abf4d.png → kaa/sprites/03c9182c-b5ba-4404-b6f9-50b06a86e102.png} +0 -0
  378. /kotonebot/{tasks/sprites/79d0b96f-64a3-4461-aad7-2df65d07363f.png → kaa/sprites/04180b4a-1532-42dd-9280-0f47c1e68959.png} +0 -0
  379. /kotonebot/{tasks/sprites/d07360e3-b744-4666-b5ab-bdf15d8f06b3.png → kaa/sprites/04b4ccde-a374-4df3-b0fa-552ae1518348.png} +0 -0
  380. /kotonebot/{tasks → kaa}/sprites/05890a1b-8764-4e9f-9d21-65d292c22e13.png +0 -0
  381. /kotonebot/{tasks/sprites/66863dbb-bf68-43cf-bbfe-b2f2d0b0696c.png → kaa/sprites/08750a02-0881-443a-9c69-c90a2ccf2a63.png} +0 -0
  382. /kotonebot/{tasks → kaa}/sprites/0949c622-9067-4f0d-bac2-3f938a1d2ed2.png +0 -0
  383. /kotonebot/{tasks/sprites/285170dc-d583-4cb3-bd95-5aaab2cc51af.png → kaa/sprites/096d3df5-2c95-41dd-bcc3-2e3afab47420.png} +0 -0
  384. /kotonebot/{tasks/sprites/039a0205-4d40-484c-98ac-757a7428395d.png → kaa/sprites/0b0e76ce-60cc-45cc-b204-227e59d39c26.png} +0 -0
  385. /kotonebot/{tasks/sprites/ba6307dd-d5f4-49a9-9ef7-7ab132454b90.png → kaa/sprites/0bd326fd-fad0-4e6c-957c-da08583ef231.png} +0 -0
  386. /kotonebot/{tasks → kaa}/sprites/0c0627be-4a09-4450-a078-1858d3ace532.png +0 -0
  387. /kotonebot/{tasks/sprites/8c5f59ac-7420-4434-9238-d689a6a554d6.png → kaa/sprites/0c3cc689-90f5-4c29-be80-04e2f2ab799a.png} +0 -0
  388. /kotonebot/{tasks/sprites/071805cd-a2aa-4f14-b076-b9151f0be492.png → kaa/sprites/0de838fb-24e9-4fe8-8e2a-cc26bce6d7d8.png} +0 -0
  389. /kotonebot/{tasks/sprites/81fab5bc-7dc4-4fe9-b96f-a1421b87e00a.png → kaa/sprites/0df088e0-737f-44ec-b39f-76239d087382.png} +0 -0
  390. /kotonebot/{tasks/sprites/635a542a-423b-48e7-ae2f-a768eba144dd.png → kaa/sprites/0f67c0a6-45d0-4953-b1a9-b5eb2c916173.png} +0 -0
  391. /kotonebot/{tasks → kaa}/sprites/0f7d581d-cea3-4039-9205-732e4cd29293.png +0 -0
  392. /kotonebot/{tasks → kaa}/sprites/135ee57a-d30d-4ba8-83f0-9f1681a49ff7.png +0 -0
  393. /kotonebot/{tasks/sprites/fd4be62c-45a1-4d61-a887-94dc87a33bd0.png → kaa/sprites/1373ec63-fd98-4be9-a925-08144f1d5ba5.png} +0 -0
  394. /kotonebot/{tasks/sprites/8c79ea1a-8551-4af3-9f56-d64e429fe0f2.png → kaa/sprites/1607c23d-3ab4-418b-8114-1a3bb782d246.png} +0 -0
  395. /kotonebot/{tasks → kaa}/sprites/1652f06a-5417-49ef-8949-4854772d9ab7.png +0 -0
  396. /kotonebot/{tasks/sprites/082a9aa2-c68d-4a9f-ae74-443ccdc1fdc9.png → kaa/sprites/16576157-f99b-4a64-b41b-3ee712c2304e.png} +0 -0
  397. /kotonebot/{tasks → kaa}/sprites/16fbc93d-b294-4001-b4e9-ee2af181415f.png +0 -0
  398. /kotonebot/{tasks/sprites/4378b011-31fc-499e-b12a-9107ad775f8e.png → kaa/sprites/17da97eb-93c5-438f-8688-0be5b0756019.png} +0 -0
  399. /kotonebot/{tasks → kaa}/sprites/1926f2f9-4bd7-48eb-9eba-28ec4efb0606.png +0 -0
  400. /kotonebot/{tasks/sprites/6fee40d3-3b38-4f39-ab5e-ec76f908dc87.png → kaa/sprites/1a0f2a10-c23b-47c7-aa7e-89b606f4d8ae.png} +0 -0
  401. /kotonebot/{tasks/sprites/387aa3b1-41e3-4e19-bf3e-9876a0a0753c.png → kaa/sprites/1a668ad4-d6b0-4aed-bb99-8b1ac85659d3.png} +0 -0
  402. /kotonebot/{tasks/sprites/f8824e3e-e2f8-44a5-a118-0e45a0e0089b.png → kaa/sprites/1b8b2a66-fb45-41d7-8441-04425a47bdeb.png} +0 -0
  403. /kotonebot/{tasks/sprites/6feccc41-0d39-4111-af6e-e102f993186b.png → kaa/sprites/1e6d734e-7bc5-4f3f-a717-3931f44a7709.png} +0 -0
  404. /kotonebot/{tasks/sprites/698c0de4-7e28-4871-84c7-1c906eb02166.png → kaa/sprites/1e7924dc-9dd4-4d54-add8-b394c75af1c7.png} +0 -0
  405. /kotonebot/{tasks/sprites/e06dfb4a-66fa-4257-bbdd-75fb44d7802f.png → kaa/sprites/2179ff5c-7964-42b1-9a95-c0bd8af1b692.png} +0 -0
  406. /kotonebot/{tasks → kaa}/sprites/23d88465-65d9-4718-8725-8dbf0a98a5a4.png +0 -0
  407. /kotonebot/{tasks → kaa}/sprites/25f00ee3-8dfe-42d1-a67e-191fa5c3df4b.png +0 -0
  408. /kotonebot/{tasks → kaa}/sprites/278b7d9c-707e-4392-9677-74574b5cdf42.png +0 -0
  409. /kotonebot/{tasks/sprites/9d4ffd9d-ec46-4171-a71e-c6deb7ac78bd.png → kaa/sprites/2860421f-2db8-4850-9f0c-0aca8bbf16d0.png} +0 -0
  410. /kotonebot/{tasks/sprites/adc6e7e9-ead9-4d68-99c7-8cd2d441fe17.png → kaa/sprites/2b87ed7c-b01b-4ea7-ab34-ec4e37e036c0.png} +0 -0
  411. /kotonebot/{tasks → kaa}/sprites/2bc00520-0afe-40e5-8743-d33fc6b2945a.png +0 -0
  412. /kotonebot/{tasks → kaa}/sprites/2bd6fe88-99fa-443d-8e42-bb3de5881213.png +0 -0
  413. /kotonebot/{tasks/sprites/ab99d98b-bb86-4038-b500-5acdd704b3a4.png → kaa/sprites/2fd33c51-b3a7-4ffb-9555-d25961186eee.png} +0 -0
  414. /kotonebot/{tasks → kaa}/sprites/303cccc1-c674-4d3a-8c89-19ea729fdbef.png +0 -0
  415. /kotonebot/{tasks → kaa}/sprites/30a6f399-6999-4f04-bb77-651e0214112f.png +0 -0
  416. /kotonebot/{tasks/sprites/0882b26e-1f20-4989-bf8a-30dde098013d.png → kaa/sprites/31271771-5149-447c-8fae-ccc308c0a838.png} +0 -0
  417. /kotonebot/{tasks/sprites/a765bd4f-9015-4c10-9cbe-fc1f0b7f8ff1.png → kaa/sprites/32793e3b-613b-4b6d-bc2e-25f9993f6274.png} +0 -0
  418. /kotonebot/{tasks/sprites/ae362578-7093-4beb-a108-0f67654c27ce.png → kaa/sprites/32a1072b-c359-4dad-80f6-c9ca558e5f99.png} +0 -0
  419. /kotonebot/{tasks/sprites/4f092c8a-0d5c-4443-a511-23e21012ce56.png → kaa/sprites/334d4915-4600-4c81-bbb0-c52291b7d089.png} +0 -0
  420. /kotonebot/{tasks/sprites/cf93ac7f-0ad4-4059-893d-be149246ffd6.png → kaa/sprites/35e6ad3a-8020-4619-b8ec-6506a8aa51fc.png} +0 -0
  421. /kotonebot/{tasks/sprites/902498a2-e5b6-4f08-b165-2d3a8577f4f8.png → kaa/sprites/36d712ce-9227-4aef-86ee-4f78415b0c80.png} +0 -0
  422. /kotonebot/{tasks/sprites/753e81b9-6e08-402a-a818-bf2a50add84c.png → kaa/sprites/39151ffc-365e-45b2-a2f4-9d4c76d41524.png} +0 -0
  423. /kotonebot/{tasks/sprites/356f3e3f-62c0-4c0e-b2f4-61b8b4ac1732.png → kaa/sprites/39d57097-6839-4030-bb51-24d6cd880897.png} +0 -0
  424. /kotonebot/{tasks → kaa}/sprites/3c8b477a-8eda-407e-9e9f-7540c8808f89.png +0 -0
  425. /kotonebot/{tasks/sprites/8ba61817-d4fc-4bda-a5ed-d0192c7b1379.png → kaa/sprites/3eb037db-4cd8-4c00-a655-fa73f612adfd.png} +0 -0
  426. /kotonebot/{tasks/sprites/11966360-6dac-4914-a887-5c172a755e33.png → kaa/sprites/3f0b91e1-898a-4f44-b116-38483bc30461.png} +0 -0
  427. /kotonebot/{tasks → kaa}/sprites/3f637e86-6b74-4693-9131-1fe411fc21e5.png +0 -0
  428. /kotonebot/{tasks → kaa}/sprites/4096cffa-a889-4622-852e-760fc7022d93.png +0 -0
  429. /kotonebot/{tasks/sprites/6cfb1eb1-5bed-49fd-9431-dd710f210c23.png → kaa/sprites/40e3dac1-74fb-4501-a20f-18422d070554.png} +0 -0
  430. /kotonebot/{tasks/sprites/28891f65-b17a-4906-ba7f-3534154dfddb.png → kaa/sprites/420e4ff4-82a3-4ea3-98a7-63efe65003a6.png} +0 -0
  431. /kotonebot/{tasks → kaa}/sprites/447d0e44-5d87-4b7c-8e60-edb111fe1639.png +0 -0
  432. /kotonebot/{tasks → kaa}/sprites/44ba8515-4a60-42c9-8878-b42e4e34ee15.png +0 -0
  433. /kotonebot/{tasks/sprites/5601f6e1-4ef1-47bd-bcd1-59cc6975019c.png → kaa/sprites/45671af1-d731-4bb1-83f7-c9d23348308f.png} +0 -0
  434. /kotonebot/{tasks/sprites/f325c798-55a0-41e6-b13c-18651b894ed3.png → kaa/sprites/45ae4d17-1887-4f2e-8cce-e5a4cc42e10b.png} +0 -0
  435. /kotonebot/{tasks → kaa}/sprites/4695f96b-c4f5-4bb6-a021-a13b6ceb2883.png +0 -0
  436. /kotonebot/{tasks → kaa}/sprites/4883c564-f950-4a29-9f5f-6f924123cd22.png +0 -0
  437. /kotonebot/{tasks/sprites/91822265-94a7-4cb2-9f07-0e03fd56b4b3.png → kaa/sprites/4a9e612b-9e52-4eb5-a851-3e5ad68030e9.png} +0 -0
  438. /kotonebot/{tasks/sprites/0e88da96-0aa8-4dae-b0c3-b79fc0c41dc4.png → kaa/sprites/4aed7e90-76b1-4837-a6ad-e2ed2e3240ec.png} +0 -0
  439. /kotonebot/{tasks → kaa}/sprites/4d78add6-1027-4939-bb51-f99fca7db2ce.png +0 -0
  440. /kotonebot/{tasks/sprites/f4c4e184-d8ae-4a61-a127-38cbe43187a3.png → kaa/sprites/4dd7db2d-3107-4fc5-8f30-cfa70bc28de1.png} +0 -0
  441. /kotonebot/{tasks/sprites/01f6fe0c-6102-4c87-a835-43c8606944a9.png → kaa/sprites/4fca090a-b94a-433a-8438-832a54ff65e8.png} +0 -0
  442. /kotonebot/{tasks/sprites/38f0ae18-7429-4430-9b9f-3e249caf8f95.png → kaa/sprites/5089ea64-3f32-4520-a252-4ee278815cdd.png} +0 -0
  443. /kotonebot/{tasks/sprites/00863609-5b4f-4a0d-b5ca-4bc10fef9089.png → kaa/sprites/50a9e2a0-1166-4f1d-ad15-d8493ce0e49e.png} +0 -0
  444. /kotonebot/{tasks → kaa}/sprites/50e23c8a-7ba2-4c9c-9cfb-196c260fa1d5.png +0 -0
  445. /kotonebot/{tasks/sprites/b877e6a8-e2b0-4a69-aa18-10e0cdd7ca5e.png → kaa/sprites/54d57991-e5d0-4346-b1f8-63e429d8a3fe.png} +0 -0
  446. /kotonebot/{tasks/sprites/7cadd195-7c81-4378-837c-099bae89e9c1.png → kaa/sprites/5663551f-5abc-4ef8-a3fd-ba57b20cb35c.png} +0 -0
  447. /kotonebot/{tasks → kaa}/sprites/582d36c0-0916-4706-9833-4fbc026701f5.png +0 -0
  448. /kotonebot/{tasks/sprites/ad137899-9ee7-4272-9de0-b50d2ad8e8ca.png → kaa/sprites/5d912f4e-c319-4d45-85e6-de6e684a6278.png} +0 -0
  449. /kotonebot/{tasks → kaa}/sprites/5ebcde3b-f0fd-4e5d-b3de-ada8f0b5e03b.png +0 -0
  450. /kotonebot/{tasks/sprites/80ee7a50-a5d6-4d1f-bb76-3f6db4142fe2.png → kaa/sprites/5ed9bef4-ab11-4186-9b21-a479eec687ce.png} +0 -0
  451. /kotonebot/{tasks/sprites/3560b13e-41e7-44ec-ae1d-49b9851b1b44.png → kaa/sprites/608217f6-b880-42ab-9be9-b4d56df87be2.png} +0 -0
  452. /kotonebot/{tasks/sprites/8e4eb6cb-bc11-4e6e-bff0-c2cc0ebd797e.png → kaa/sprites/60f292d1-6c2d-4cfb-af76-568610817722.png} +0 -0
  453. /kotonebot/{tasks/sprites/aa69ed59-cf5f-4a72-83fb-6b0145ae5bdd.png → kaa/sprites/639465a0-3c63-4307-a72c-4f9e543d2095.png} +0 -0
  454. /kotonebot/{tasks/sprites/ac1f1a17-06f8-49f0-9aef-b93035994a47.png → kaa/sprites/63f28640-766f-4698-b556-f0a0cbac6a1a.png} +0 -0
  455. /kotonebot/{tasks/sprites/8fc5fe74-4b79-4410-b690-f28728fffb5c.png → kaa/sprites/666b1e8c-19fb-49e9-a761-1069f635f450.png} +0 -0
  456. /kotonebot/{tasks/sprites/244704ba-7f99-4318-b21e-662b7ba276f0.png → kaa/sprites/669f9e7c-b665-47a8-b4f5-fb2748bf88af.png} +0 -0
  457. /kotonebot/{tasks → kaa}/sprites/6720b6e8-ae80-4cc0-a885-518efe12b707.png +0 -0
  458. /kotonebot/{tasks/sprites/df246127-de72-4284-af29-949bec8afb15.png → kaa/sprites/6abe81b7-1a04-44e9-b390-affe47799c46.png} +0 -0
  459. /kotonebot/{tasks → kaa}/sprites/6b58d90d-2e5e-4b7f-bc01-941f2633de89.png +0 -0
  460. /kotonebot/{tasks/sprites/86e37ce5-4180-4961-af0f-d48bceff57cc.png → kaa/sprites/6d4f414d-ccd8-4a25-aa32-1b77ce0035d6.png} +0 -0
  461. /kotonebot/{tasks/sprites/4f4a5b5a-6b18-41f7-91d2-386f892561d8.png → kaa/sprites/6d706642-441f-4bcc-b377-0fce3484be22.png} +0 -0
  462. /kotonebot/{tasks/sprites/2f2175e7-2be6-4c68-add6-a67ee4930f17.png → kaa/sprites/6e81e54e-b69b-434a-8bbf-6e2551bddeb8.png} +0 -0
  463. /kotonebot/{tasks/sprites/47621c85-adfe-4cfe-91bf-8b377dae12dc.png → kaa/sprites/6fec0efa-336f-4726-b1d9-dc83c23b297d.png} +0 -0
  464. /kotonebot/{tasks/sprites/07e654d8-2549-4e2a-a605-d25979c8fbb9.png → kaa/sprites/7383d7d0-8ee2-4413-b590-51cff541cab3.png} +0 -0
  465. /kotonebot/{tasks → kaa}/sprites/74ff07b3-d91c-4579-80cd-379ed7020622.png +0 -0
  466. /kotonebot/{tasks/sprites/988814ad-c182-451f-9284-6c6ce146bd04.png → kaa/sprites/76b0e3b3-3438-4e88-aca8-da18c8e50ddd.png} +0 -0
  467. /kotonebot/{tasks/sprites/a7b81ae0-8f17-43b9-b915-05f759829a8f.png → kaa/sprites/7971b595-44d3-4ce7-91ae-a8e5a25c543b.png} +0 -0
  468. /kotonebot/{tasks → kaa}/sprites/79abd239-5eed-4195-9fa8-d729daa874ca.png +0 -0
  469. /kotonebot/{tasks/sprites/ec6ab13a-34d4-4d69-a1d0-0994ea18c84a.png → kaa/sprites/7b07a31c-9e2b-4ce0-8998-ccc0592de5e0.png} +0 -0
  470. /kotonebot/{tasks/sprites/e1965539-5b32-46f2-a87d-5a30caf768df.png → kaa/sprites/7b195535-7362-492f-8d87-b8eed15c6fc0.png} +0 -0
  471. /kotonebot/{tasks/sprites/61616dd1-1d7f-4438-9965-7732eb830328.png → kaa/sprites/7d4d708f-c629-4f52-a0af-11aee7fcb878.png} +0 -0
  472. /kotonebot/{tasks/sprites/fd54e59f-b3e4-4d30-85d6-013ffdf1fe31.png → kaa/sprites/7d5b4d44-cb46-49fb-96be-edaab5396836.png} +0 -0
  473. /kotonebot/{tasks/sprites/b85bc6e5-8294-4ce0-a727-82a4e53e24bc.png → kaa/sprites/7d778f82-f908-4edb-9b12-d8460589ab11.png} +0 -0
  474. /kotonebot/{tasks/sprites/a23deeb3-9229-41ef-bbc7-1e3c212f1199.png → kaa/sprites/7dec3bd9-f8ee-430f-af54-0c03c4c91546.png} +0 -0
  475. /kotonebot/{tasks/sprites/b3b03359-511e-4693-b60b-2f617b281838.png → kaa/sprites/7e64561b-0dab-420a-8f79-45ed6801939b.png} +0 -0
  476. /kotonebot/{tasks/sprites/d209a445-49f9-478f-93c7-5a9f1db8a629.png → kaa/sprites/8031a52b-afe1-4ebd-9599-1d123bc0e48b.png} +0 -0
  477. /kotonebot/{tasks/sprites/34e9e2ba-e341-44c4-9823-5e477d47908e.png → kaa/sprites/817c22a3-ecfe-4949-a784-59342e61a880.png} +0 -0
  478. /kotonebot/{tasks → kaa}/sprites/835489e2-b29b-426c-b4c9-3bb9f8eb6195.png +0 -0
  479. /kotonebot/{tasks → kaa}/sprites/83d0a033-466c-463a-bb8c-be0f2953e9b2.png +0 -0
  480. /kotonebot/{tasks → kaa}/sprites/8424ecdd-8857-4764-9fd0-d4bfa440c128.png +0 -0
  481. /kotonebot/{tasks/sprites/ac687d98-8ca4-4103-b8c9-a037c073c51a.png → kaa/sprites/847cb208-a71c-42e3-97f1-18d4aa886b41.png} +0 -0
  482. /kotonebot/{tasks → kaa}/sprites/868b97a9-492e-4712-b47f-82b97495b019.png +0 -0
  483. /kotonebot/{tasks/sprites/d4c12cad-2e87-4923-85a8-09a4c3487176.png → kaa/sprites/89d6407a-982c-4dbc-8dd7-89cf79429eec.png} +0 -0
  484. /kotonebot/{tasks → kaa}/sprites/8c179a21-be6f-4db8-a9b0-9afeb5c36b1c.png +0 -0
  485. /kotonebot/{tasks → kaa}/sprites/8ded6c98-85ea-4858-a66d-4fc8caecb7c5.png +0 -0
  486. /kotonebot/{tasks/sprites/ba66f44b-53a5-4d79-9891-91b2bd1d5996.png → kaa/sprites/8e78e1f1-ea2f-4779-a8cd-56336f936c81.png} +0 -0
  487. /kotonebot/{tasks/sprites/f17aa537-d03d-43d4-adb8-835d664c6696.png → kaa/sprites/8f39322e-92d2-4cc6-80ef-341884b0a598.png} +0 -0
  488. /kotonebot/{tasks/sprites/b78bcb02-630c-4376-a34e-ff6cfb0b6655.png → kaa/sprites/91940a9e-2cfc-423a-86d6-49429c051ea0.png} +0 -0
  489. /kotonebot/{tasks → kaa}/sprites/9340b854-025c-40da-9387-385d38433bef.png +0 -0
  490. /kotonebot/{tasks/sprites/463feca7-bdc5-4115-909d-a7e5972586cb.png → kaa/sprites/957dbdc4-8367-4a59-9bfc-d35ea11af9b8.png} +0 -0
  491. /kotonebot/{tasks/sprites/6d54a9da-a11f-4df2-bed0-586791eb886c.png → kaa/sprites/979c7468-d9ef-4cc1-9449-2aa716caabb0.png} +0 -0
  492. /kotonebot/{tasks/sprites/ede9481d-f960-4c5c-91a5-04e2e9f761ea.png → kaa/sprites/97bbc57d-780a-40f4-8fe1-bcaef697b601.png} +0 -0
  493. /kotonebot/{tasks/sprites/0c01dbb0-9c24-49a3-9697-ca6275afe470.png → kaa/sprites/99e95c59-d5da-448d-b839-51428b2686f0.png} +0 -0
  494. /kotonebot/{tasks/sprites/7cf4fd8e-8d12-4692-8296-29bcb3d7f769.png → kaa/sprites/9a5e7bc9-830f-4b01-8f94-6d4f589754c0.png} +0 -0
  495. /kotonebot/{tasks/sprites/68fc46ce-6e14-4050-ae27-3fb5f89d262f.png → kaa/sprites/9cc7997f-3aeb-4b20-ae42-468ebfbc851e.png} +0 -0
  496. /kotonebot/{tasks/sprites/dc0437c0-32a2-4dd1-a25f-8bea4cae6bbc.png → kaa/sprites/9e110778-1b66-4700-b462-64c1dea368da.png} +0 -0
  497. /kotonebot/{tasks/sprites/a4ce3096-e7cb-4da7-9736-e160f4e1656b.png → kaa/sprites/9e5c5ffc-450d-4ddc-a4ae-27c33267b056.png} +0 -0
  498. /kotonebot/{tasks/sprites/d09444a7-35f5-4e33-b4fa-02bb5b337007.png → kaa/sprites/9f56889b-0251-4ec1-8ccb-5cfd3bddd396.png} +0 -0
  499. /kotonebot/{tasks → kaa}/sprites/9fd0753f-c607-4d49-82d1-40bda27e014f.png +0 -0
  500. /kotonebot/{tasks/sprites/595de630-e8c0-4f13-a237-426e3e559536.png → kaa/sprites/9fd268df-96b7-4b48-a6d1-b5da2161da8e.png} +0 -0
  501. /kotonebot/{tasks/daily → kaa/sprites}/__init__.py +0 -0
  502. /kotonebot/{tasks/sprites/87def14e-1f0f-4889-b4a6-ae46d86eca4c.png → kaa/sprites/a03e79b3-7f44-4211-b625-2510ba8031bc.png} +0 -0
  503. /kotonebot/{tasks/sprites/d7d64e1e-75a2-41c9-ba9b-a6b8aa075245.png → kaa/sprites/a0b83694-4945-4476-aa2e-f268841ac372.png} +0 -0
  504. /kotonebot/{tasks/sprites/fd1377fa-3ce3-4300-b74b-7e73f8babce4.png → kaa/sprites/a1c29e77-138c-4580-a777-666815039524.png} +0 -0
  505. /kotonebot/{tasks → kaa}/sprites/a1df3af1-a3e7-4521-a085-e4dc3cd1cc57.png +0 -0
  506. /kotonebot/{tasks/sprites/73f80112-607d-489f-bad5-35965cf7faac.png → kaa/sprites/a3140a53-ffb4-4094-a39c-240e9fe42308.png} +0 -0
  507. /kotonebot/{tasks/sprites/aa7b1004-8518-4210-be36-565447d01c08.png → kaa/sprites/a35aed53-ff78-41f0-9a19-c69fda40aeef.png} +0 -0
  508. /kotonebot/{tasks/sprites/d0d172d1-c223-4c88-847c-b6db190a7893.png → kaa/sprites/a477c873-98bd-45f0-a9a6-324e714c69cd.png} +0 -0
  509. /kotonebot/{tasks → kaa}/sprites/a48324ae-7c1a-489e-b3c4-93d12267f88d.png +0 -0
  510. /kotonebot/{tasks → kaa}/sprites/a7f5abf1-982f-4a55-8d41-3ad6f56798e0.png +0 -0
  511. /kotonebot/{tasks → kaa}/sprites/a9fcaf04-0c1f-4b0f-bb5b-ede9da96180f.png +0 -0
  512. /kotonebot/{tasks/sprites/92673814-2187-4d45-af94-aef75af4b614.png → kaa/sprites/ad26884a-8371-420f-be89-7fe82ddaf1e8.png} +0 -0
  513. /kotonebot/{tasks → kaa}/sprites/adc533a7-970b-4c5b-a037-2181531a35d6.png +0 -0
  514. /kotonebot/{tasks → kaa}/sprites/afa06fdc-a345-4384-b25d-b16540830256.png +0 -0
  515. /kotonebot/{tasks → kaa}/sprites/b0283997-7931-476d-a92f-d7569f6ea34c.png +0 -0
  516. /kotonebot/{tasks → kaa}/sprites/b2af59e9-60e3-4d97-8c72-c7ba092113a3.png +0 -0
  517. /kotonebot/{tasks → kaa}/sprites/b2e1bf3c-2c36-4fb5-9db7-c10a29563a37.png +0 -0
  518. /kotonebot/{tasks/sprites/d103e7cb-ba0f-46bb-a53c-13cd57891243.png → kaa/sprites/b332eb23-6653-4d17-b779-2451a3b261ab.png} +0 -0
  519. /kotonebot/{tasks → kaa}/sprites/b62bf889-da3c-495a-8707-f3bde73efe92.png +0 -0
  520. /kotonebot/{tasks/sprites/67a9d49a-caae-4257-999f-a9ae13c29052.png → kaa/sprites/b673cc06-14ef-4a22-b484-13a17b01b0d4.png} +0 -0
  521. /kotonebot/{tasks/sprites/91241820-d22f-43ff-95b4-889ac94d43ea.png → kaa/sprites/b677c2ba-62da-4afd-8ba7-a9b40362b5bb.png} +0 -0
  522. /kotonebot/{tasks → kaa}/sprites/b6b94f21-ef4b-4425-9c7e-ca2b574b0add.png +0 -0
  523. /kotonebot/{tasks/sprites/cd3b917a-112b-4e89-a462-fd06862d0ce7.png → kaa/sprites/ba07fa5e-3451-4520-8b10-0b240e5decec.png} +0 -0
  524. /kotonebot/{tasks → kaa}/sprites/bab6c393-692c-4681-ac0d-76c0d9dabea6.png +0 -0
  525. /kotonebot/{tasks/sprites/9e1eeaf8-881c-4531-8902-ce35e26f99a3.png → kaa/sprites/bbcb97e2-89b7-4de2-b480-a0442fc33b1e.png} +0 -0
  526. /kotonebot/{tasks/sprites/02e9b34f-e37b-4596-89a3-7800e1b225aa.png → kaa/sprites/bc64dd37-48ba-45a5-af6d-457a7fb2c9fd.png} +0 -0
  527. /kotonebot/{tasks → kaa}/sprites/bc7155ac-18c9-4335-9ec2-c8762d37a057.png +0 -0
  528. /kotonebot/{tasks/sprites/3f426036-b595-4f31-81d4-62fff1e4fd11.png → kaa/sprites/bda40c0d-55a9-41ad-ba8a-e8aafc52608b.png} +0 -0
  529. /kotonebot/{tasks/sprites/0d5f05bd-5cb3-47e7-96af-49eced4d8459.png → kaa/sprites/be7504d5-48e5-404c-a74d-f7fa86acf276.png} +0 -0
  530. /kotonebot/{tasks/sprites/cca9d31d-c6e0-4204-8ff0-faeb13a7c4cb.png → kaa/sprites/bee4fbe2-365f-4145-b8f4-87c2c460cd71.png} +0 -0
  531. /kotonebot/{tasks/sprites/689a5a55-fdbe-4359-a06c-60424d7399ea.png → kaa/sprites/bf158b17-4d93-40f1-b9cf-4ae9226bcfc1.png} +0 -0
  532. /kotonebot/{tasks/sprites/cd8ac136-4a54-4c8a-b0eb-4c1d11fbf4b8.png → kaa/sprites/c15ad104-3814-467c-a211-1e54be35fc66.png} +0 -0
  533. /kotonebot/{tasks → kaa}/sprites/c3f536d6-a04a-4651-b3f9-dd2c22593f7f.png +0 -0
  534. /kotonebot/{tasks → kaa}/sprites/c5b7d67e-7260-4f08-a0e9-4d31ce9bbecf.png +0 -0
  535. /kotonebot/{tasks → kaa}/sprites/c78c38cc-7b61-4dc4-820d-0a5b684ef52e.png +0 -0
  536. /kotonebot/{tasks/sprites/5b53650e-1996-483b-a688-06c273defefc.png → kaa/sprites/c7a33e9e-2f1c-4171-b1f7-7d7dcc1a7bd3.png} +0 -0
  537. /kotonebot/{tasks → kaa}/sprites/c948f136-416f-447e-8152-54a1cd1d1329.png +0 -0
  538. /kotonebot/{tasks → kaa}/sprites/c954e153-d3e9-4488-869f-d00cfdfac5ee.png +0 -0
  539. /kotonebot/{tasks → kaa}/sprites/cbf4ce9c-f8d8-4fb7-a197-15bb9847df04.png +0 -0
  540. /kotonebot/{tasks → kaa}/sprites/cc8a495d-330d-447d-8a80-a8a6ecc409c5.png +0 -0
  541. /kotonebot/{tasks → kaa}/sprites/ccbcb114-7f73-43d1-904a-3a7ae660c531.png +0 -0
  542. /kotonebot/{tasks → kaa}/sprites/ce1d1d6f-38f2-48bf-98bd-6e091c7ca5b8.png +0 -0
  543. /kotonebot/{tasks → kaa}/sprites/cfc9c8e8-cbe1-49f0-9afa-ead7f9455a2e.png +0 -0
  544. /kotonebot/{tasks/sprites/f2174e61-bdf3-4044-8054-b9088f2e6937.png → kaa/sprites/d11d8839-90ef-433c-8555-fad5478009a0.png} +0 -0
  545. /kotonebot/{tasks → kaa}/sprites/d15959bf-d07b-4f07-948a-c0aeaf17756a.png +0 -0
  546. /kotonebot/{tasks/sprites/15885b12-0899-4281-90cd-2d2d68c2fc19.png → kaa/sprites/d1a8f72b-813b-4d8a-a596-5576758d7fe2.png} +0 -0
  547. /kotonebot/{tasks → kaa}/sprites/d271a24f-efe8-424d-8fd5-f6b3756ba4ca.png +0 -0
  548. /kotonebot/{tasks/sprites/7b0fa527-a7a9-460a-91be-fa17a4e24c69.png → kaa/sprites/d2830bf7-e0c4-4d00-868a-6df22bdf6fcd.png} +0 -0
  549. /kotonebot/{tasks → kaa}/sprites/d3cc3323-51af-4882-ae12-49e7384b746d.png +0 -0
  550. /kotonebot/{tasks/sprites/6fdbd1c7-8f91-428c-a891-1854775dcfe3.png → kaa/sprites/d3fa5988-1184-4478-abb9-1c9799bd4100.png} +0 -0
  551. /kotonebot/{tasks/sprites/ece3da4d-6d51-4043-b956-65e2284283df.png → kaa/sprites/d4673e38-cf76-4062-9a71-0f31936fe49b.png} +0 -0
  552. /kotonebot/{tasks → kaa}/sprites/d6b64759-26b7-45b1-bf8e-5c0d98611e0d.png +0 -0
  553. /kotonebot/{tasks → kaa}/sprites/d7667903-7149-4f2f-9c15-d8a4b5f4d347.png +0 -0
  554. /kotonebot/{tasks → kaa}/sprites/d83f338d-dde3-494b-9bea-cae511e3517c.png +0 -0
  555. /kotonebot/{tasks → kaa}/sprites/d982d2b5-4bc0-4ae9-a516-f29c2848d64b.png +0 -0
  556. /kotonebot/{tasks → kaa}/sprites/da439e8c-3b74-4371-9657-0736d826c7d1.png +0 -0
  557. /kotonebot/{tasks → kaa}/sprites/daf3d823-b7f1-4584-acf3-90b9d880332c.png +0 -0
  558. /kotonebot/{tasks → kaa}/sprites/db7d3f03-1f7f-43bf-8125-f7c2d345fca2.png +0 -0
  559. /kotonebot/{tasks → kaa}/sprites/de325534-3fd3-480a-9eb8-eb47960a753a.png +0 -0
  560. /kotonebot/{tasks/sprites/772934e8-3a31-45da-911b-2ea0a148c31d.png → kaa/sprites/de619141-10a4-4447-89b3-6cabcbf52d8a.png} +0 -0
  561. /kotonebot/{tasks → kaa}/sprites/df991b42-ed8e-4f2c-bf0c-aa7522f147b6.png +0 -0
  562. /kotonebot/{tasks/sprites/afb6ffb3-f8b0-4d56-bc97-11433d62ee0e.png → kaa/sprites/dfe2fc89-eaf7-4027-bb53-dd17a9741e01.png} +0 -0
  563. /kotonebot/{tasks/sprites/64d07c66-b2c1-4859-9b55-836edacfd66d.png → kaa/sprites/dff3509c-f0ec-44e2-8e0b-3c6b465d45f3.png} +0 -0
  564. /kotonebot/{tasks → kaa}/sprites/e4683def-8d1d-472b-a5ab-bb3885c0c98e.png +0 -0
  565. /kotonebot/{tasks → kaa}/sprites/e5e84f9e-28da-4cf4-bcba-c9145fe39b07.png +0 -0
  566. /kotonebot/{tasks/sprites/5b23ba69-bda4-4dd3-81b8-30c9f67c7631.png → kaa/sprites/e73cacc9-08aa-4b7a-acd3-3dbe95d9f51c.png} +0 -0
  567. /kotonebot/{tasks/sprites/7b20f696-11d6-44ad-81e9-a930ec586faa.png → kaa/sprites/e753b92e-99bf-4d81-9673-92b5f67d129b.png} +0 -0
  568. /kotonebot/{tasks → kaa}/sprites/e88c9ad1-ec37-4fcd-b086-862e1e7ce8fd.png +0 -0
  569. /kotonebot/{tasks/sprites/de9fd552-df05-4528-9046-e78b9274c795.png → kaa/sprites/e941ae91-59bf-4a69-945b-1bcd7cf241c6.png} +0 -0
  570. /kotonebot/{tasks/sprites/5be214de-ec07-4249-a6d4-10e3a12dcc7b.png → kaa/sprites/e97e58cb-3412-4a8c-9a9e-dd45daa5ae02.png} +0 -0
  571. /kotonebot/{tasks → kaa}/sprites/e9ee330d-dfca-440e-8b8c-0a3b4e8c8730.png +0 -0
  572. /kotonebot/{tasks → kaa}/sprites/ea1ba124-9cb3-4427-969a-bacd47e7d920.png +0 -0
  573. /kotonebot/{tasks → kaa}/sprites/eaba6ebe-f0df-4918-aee5-ef4e3ffedcf0.png +0 -0
  574. /kotonebot/{tasks/sprites/87440d64-143e-4e97-b2fb-c47887500265.png → kaa/sprites/ebcaaba7-57f8-4bcb-93da-a288a0fcc95e.png} +0 -0
  575. /kotonebot/{tasks/sprites/99f2aaed-3386-43c4-943e-4012bac9b60a.png → kaa/sprites/edb144e1-7c82-4fcf-b426-c6294ad2112d.png} +0 -0
  576. /kotonebot/{tasks → kaa}/sprites/ee4e512b-4982-49b6-9c71-31984b58e1d0.png +0 -0
  577. /kotonebot/{tasks → kaa}/sprites/eef25cf9-afd0-43b1-b9c5-fbd997bd5fe0.png +0 -0
  578. /kotonebot/{tasks/sprites/aca45c0f-2f0e-41ba-95d5-d496b0e1c0eb.png → kaa/sprites/f14cc536-f38c-4568-9812-d3ed95e639d3.png} +0 -0
  579. /kotonebot/{tasks/sprites/686087b3-cd6b-4ccc-b86a-83222801c1da.png → kaa/sprites/f1a60528-1f35-451f-92e3-b1d5407e0f4e.png} +0 -0
  580. /kotonebot/{tasks → kaa}/sprites/f1f21925-3e22-4dd1-b53b-bb52bcf26c2b.png +0 -0
  581. /kotonebot/{tasks/sprites/0b944b68-db61-4df7-9036-ce7c4b0587e0.png → kaa/sprites/f32e04e8-2e9a-49c2-9734-d0a02ed2d892.png} +0 -0
  582. /kotonebot/{tasks → kaa}/sprites/f43c313b-8a7b-467b-8442-fc5bcb8b4388.png +0 -0
  583. /kotonebot/{tasks/sprites/a3f13cbf-1da6-484a-bbc3-1f3f43411616.png → kaa/sprites/f4c8a757-674e-45ca-af2c-0bc409b7bca8.png} +0 -0
  584. /kotonebot/{tasks → kaa}/sprites/f6ca6bd3-543f-4779-8367-c5c883f04b95.png +0 -0
  585. /kotonebot/{tasks/sprites/67300e55-b339-4b20-b7af-48522a3fd419.png → kaa/sprites/f71df091-fc71-48d4-8124-b3c46f4c4436.png} +0 -0
  586. /kotonebot/{tasks/sprites/eac201c2-4a68-42de-8b0e-fa7ab7f23646.png → kaa/sprites/f790aed5-b9f3-4c93-a14f-47629f53052d.png} +0 -0
  587. /kotonebot/{tasks/sprites/952c91b7-120b-4552-9713-fb7088164199.png → kaa/sprites/f89cafb7-657b-4ab4-8917-1964b242ff2e.png} +0 -0
  588. /kotonebot/{tasks/sprites/8190567d-48ea-4d6d-9310-79bb826e5c61.png → kaa/sprites/f9e0be54-237b-4092-8784-1a4d2eb43097.png} +0 -0
  589. /kotonebot/{tasks/sprites/4d33b797-533c-486d-bf87-40856cf31bc8.png → kaa/sprites/fa64ed03-4277-4ae2-a958-adb93c393457.png} +0 -0
  590. /kotonebot/{tasks → kaa}/sprites/fad5eec2-5fd5-412f-9abb-987a3087dc54.png +0 -0
  591. /kotonebot/{tasks/sprites/e5724b5e-6827-40a3-9abe-dd2a2356e32d.png → kaa/sprites/fb529219-fc53-43e1-83ca-2313d1d33636.png} +0 -0
  592. /kotonebot/{tasks/sprites/fa438264-8e21-4f99-bf6f-f7f8d92bd58f.png → kaa/sprites/fe7e4f2b-b795-43b6-bf0a-4e65c9133a40.png} +0 -0
  593. /kotonebot/{tasks/sprites/23822022-71f7-4810-8e3a-cebad024d70e.png → kaa/sprites/ff493975-0f30-468f-a3ea-17505a2b0385.png} +0 -0
  594. /kotonebot/{tasks/produce → kaa/tasks}/__init__.py +0 -0
  595. /kotonebot/{tasks/resources → kaa/tasks/actions}/__init__.py +0 -0
  596. /kotonebot/{tasks/sprites → kaa/tasks/daily}/__init__.py +0 -0
  597. /kotonebot/{tasks → kaa}/util/trace.py +0 -0
  598. {ksaa-2025.5.2.2.dist-info → ksaa-2025.5.16.1.dist-info}/top_level.txt +0 -0
kotonebot/backend/bot.py CHANGED
@@ -1,22 +1,17 @@
1
+ import io
2
+ import os
1
3
  import logging
2
4
  import pkgutil
3
5
  import importlib
6
+ import threading
4
7
  from typing_extensions import Self
5
8
  from dataclasses import dataclass, field
6
- import threading
7
- import traceback
8
- import os
9
- import zipfile
10
- import cv2
11
- from datetime import datetime
12
- import io
13
9
  from typing import Any, Literal, Callable, Generic, TypeVar, ParamSpec
14
10
 
15
- from kotonebot.backend.context import Task, Action
16
- from kotonebot.backend.context import init_context, vars
17
- from kotonebot.backend.context import task_registry, action_registry, current_callstack, Task, Action
18
- from kotonebot.client.host.protocol import Instance
19
11
  from kotonebot.ui import user
12
+ from kotonebot.client.host.protocol import Instance
13
+ from kotonebot.backend.context import init_context, vars
14
+ from kotonebot.backend.context import task_registry, action_registry, Task, Action
20
15
 
21
16
  log_stream = io.StringIO()
22
17
  stream_handler = logging.StreamHandler(log_stream)
@@ -39,41 +34,6 @@ class RunStatus:
39
34
  def interrupt(self):
40
35
  vars.interrupted.set()
41
36
 
42
- def _save_error_report(
43
- exception: Exception,
44
- *,
45
- path: str | None = None
46
- ) -> str:
47
- """
48
- 保存错误报告
49
-
50
- :param path: 保存的路径。若为 `None`,则保存到 `./reports/{YY-MM-DD HH-MM-SS}.zip`。
51
- :return: 保存的路径
52
- """
53
- from kotonebot import device
54
- try:
55
- if path is None:
56
- path = f'./reports/{datetime.now().strftime("%Y-%m-%d %H-%M-%S")}.zip'
57
- exception_msg = '\n'.join(traceback.format_exception(exception))
58
- task_callstack = '\n'.join([f'{i+1}. name={task.name} priority={task.priority}' for i, task in enumerate(current_callstack)])
59
- screenshot = device.screenshot()
60
- logs = log_stream.getvalue()
61
- with open('config.json', 'r', encoding='utf-8') as f:
62
- config_content = f.read()
63
-
64
- if not os.path.exists(os.path.dirname(path)):
65
- os.makedirs(os.path.dirname(path))
66
- with zipfile.ZipFile(path, 'w') as zipf:
67
- zipf.writestr('exception.txt', exception_msg)
68
- zipf.writestr('task_callstack.txt', task_callstack)
69
- zipf.writestr('screenshot.png', cv2.imencode('.png', screenshot)[1].tobytes())
70
- zipf.writestr('config.json', config_content)
71
- zipf.writestr('logs.txt', logs)
72
- return path
73
- except Exception as e:
74
- logger.exception(f'Failed to save error report:')
75
- return ''
76
-
77
37
  # Modified from https://stackoverflow.com/questions/70982565/how-do-i-make-an-event-listener-with-decorators-in-python
78
38
  Params = ParamSpec('Params')
79
39
  Return = TypeVar('Return')
@@ -125,11 +85,12 @@ class KotoneBot:
125
85
  def __init__(
126
86
  self,
127
87
  module: str,
88
+ config_path: str,
128
89
  config_type: type = dict[str, Any],
129
90
  *,
130
91
  debug: bool = False,
131
92
  resume_on_error: bool = False,
132
- auto_save_error_report: bool = True,
93
+ auto_save_error_report: bool = False,
133
94
  ):
134
95
  """
135
96
  初始化 KotoneBot。
@@ -141,6 +102,7 @@ class KotoneBot:
141
102
  :param auto_save_error_report: 是否自动保存错误报告。
142
103
  """
143
104
  self.module = module
105
+ self.config_path = config_path
144
106
  self.config_type = config_type
145
107
  # HACK: 硬编码
146
108
  self.current_config: int | str = 0
@@ -150,6 +112,9 @@ class KotoneBot:
150
112
  self.events = KotoneBotEvents()
151
113
  self.backend_instance: Instance | None = None
152
114
 
115
+ if self.auto_save_error_report:
116
+ raise NotImplementedError('auto_save_error_report not implemented yet.')
117
+
153
118
  def initialize(self):
154
119
  """
155
120
  初始化并载入所有任务和动作。
@@ -176,7 +141,7 @@ class KotoneBot:
176
141
  from kotonebot.client.host import create_custom
177
142
  from kotonebot.config.manager import load_config
178
143
  # HACK: 硬编码
179
- config = load_config('config.json', type=self.config_type)
144
+ config = load_config(self.config_path, type=self.config_type)
180
145
  config = config.user_configs[0]
181
146
  logger.info('Checking backend...')
182
147
  if config.backend.type == 'custom' and config.backend.check_emulator:
@@ -207,7 +172,7 @@ class KotoneBot:
207
172
  按优先级顺序运行所有任务。
208
173
  """
209
174
  self.check_backend()
210
- init_context(config_type=self.config_type)
175
+ init_context(config_path=self.config_path, config_type=self.config_type)
211
176
  vars.interrupted.clear()
212
177
 
213
178
  if by_priority:
@@ -238,7 +203,7 @@ class KotoneBot:
238
203
  logger.exception(f'Error: ')
239
204
  report_path = None
240
205
  if self.auto_save_error_report:
241
- report_path = _save_error_report(e)
206
+ raise NotImplementedError
242
207
  self.events.task_status_changed.trigger(task, 'error')
243
208
  if not self.resume_on_error:
244
209
  for task1 in tasks[tasks.index(task)+1:]:
@@ -255,7 +255,7 @@ class ContextStackVars:
255
255
  class ContextOcr:
256
256
  def __init__(self, context: 'Context'):
257
257
  self.context = context
258
- self.__engine = jp
258
+ self.__engine = jp()
259
259
 
260
260
  def raw(self, lang: OcrLanguage = 'jp') -> Ocr:
261
261
  """
@@ -264,9 +264,9 @@ class ContextOcr:
264
264
  """
265
265
  match lang:
266
266
  case 'jp':
267
- return jp
267
+ return jp()
268
268
  case 'en':
269
- return en
269
+ return en()
270
270
  case _:
271
271
  raise ValueError(f"Invalid language: {lang}")
272
272
 
@@ -601,9 +601,9 @@ class ContextDebug:
601
601
 
602
602
  V = TypeVar('V')
603
603
  class ContextConfig(Generic[T]):
604
- def __init__(self, context: 'Context', config_type: Type[T] = dict[str, Any]):
604
+ def __init__(self, context: 'Context', config_path: str = 'config.json', config_type: Type[T] = dict[str, Any]):
605
605
  self.context = context
606
- self.config_path: str = 'config.json'
606
+ self.config_path: str = config_path
607
607
  self.current_key: int | str = 0
608
608
  self.config_type: Type = config_type
609
609
  self.root = load_config(self.config_path, type=config_type)
@@ -730,13 +730,13 @@ class ContextDevice(Device):
730
730
 
731
731
 
732
732
  class Context(Generic[T]):
733
- def __init__(self, config_type: Type[T], screenshot_impl: Optional[DeviceImpl] = None):
733
+ def __init__(self, config_path: str, config_type: Type[T], screenshot_impl: Optional[DeviceImpl] = None):
734
734
  self.__ocr = ContextOcr(self)
735
735
  self.__image = ContextImage(self)
736
736
  self.__color = ContextColor(self)
737
737
  self.__vars = ContextGlobalVars()
738
738
  self.__debug = ContextDebug(self)
739
- self.__config = ContextConfig[T](self, config_type)
739
+ self.__config = ContextConfig[T](self, config_path, config_type)
740
740
 
741
741
  ip = self.config.current.backend.adb_ip
742
742
  port = self.config.current.backend.adb_port
@@ -851,6 +851,7 @@ next_wait_time: float = 0
851
851
 
852
852
  def init_context(
853
853
  *,
854
+ config_path: str = 'config.json',
854
855
  config_type: Type[T] = dict[str, Any],
855
856
  force: bool = False,
856
857
  screenshot_impl: Optional[DeviceImpl] = None
@@ -858,6 +859,7 @@ def init_context(
858
859
  """
859
860
  初始化 Context 模块。
860
861
 
862
+ :param config_path: 配置文件路径。
861
863
  :param config_type: 配置数据类类型。
862
864
  配置数据类必须继承自 pydantic 的 `BaseModel`。
863
865
  默认为 `dict[str, Any]`,即普通的 JSON 数据,不包含任何类型信息。
@@ -869,7 +871,7 @@ def init_context(
869
871
  global _c, device, ocr, image, color, vars, debug, config
870
872
  if _c is not None and not force:
871
873
  return
872
- _c = Context(config_type=config_type, screenshot_impl=screenshot_impl)
874
+ _c = Context(config_path=config_path, config_type=config_type, screenshot_impl=screenshot_impl)
873
875
  device._FORWARD_getter = lambda: _c.device # type: ignore
874
876
  ocr._FORWARD_getter = lambda: _c.ocr # type: ignore
875
877
  image._FORWARD_getter = lambda: _c.image # type: ignore
@@ -14,7 +14,6 @@ import cv2
14
14
  import uvicorn
15
15
  from thefuzz import fuzz
16
16
  from pydantic import BaseModel
17
- from fastapi.staticfiles import StaticFiles
18
17
  from fastapi.responses import FileResponse, Response
19
18
  from fastapi import FastAPI, WebSocket, HTTPException
20
19
  from fastapi.middleware.cors import CORSMiddleware
@@ -143,7 +142,7 @@ def list_dir(path: str) -> list[File]:
143
142
 
144
143
  @app.get("/api/resources/autocomplete")
145
144
  def autocomplete(class_path: str) -> list[str]:
146
- from kotonebot.tasks import R # HACK: hardcode
145
+ from kotonebot.kaa.tasks import R
147
146
  class_names = class_path.split(".")[:-1]
148
147
  target_class = R
149
148
  # 定位到目标类
kotonebot/backend/ocr.py CHANGED
@@ -20,21 +20,6 @@ from ..util import Rect, lf_path
20
20
  from .debug import result as debug_result, debug
21
21
 
22
22
  logger = logging.getLogger(__name__)
23
-
24
- # TODO: 这个路径需要能够独立设置
25
- _engine_jp = RapidOCR(
26
- rec_model_path=lf_path('models/japan_PP-OCRv4_rec_infer.onnx'),
27
- use_det=True,
28
- use_cls=False,
29
- use_rec=True,
30
- )
31
- _engine_en = RapidOCR(
32
- rec_model_path=lf_path('models/en_PP-OCRv3_rec_infer.onnx'),
33
- use_det=True,
34
- use_cls=False,
35
- use_rec=True,
36
- )
37
-
38
23
  StringMatchFunction = Callable[[str], bool]
39
24
  REGEX_NUMBERS = re.compile(r'\d+')
40
25
 
@@ -483,13 +468,42 @@ class Ocr:
483
468
  raise TextNotFoundError(text, img)
484
469
  return ret
485
470
 
471
+ # TODO: 这个路径需要能够独立设置
472
+ _engine_jp: RapidOCR | None = None
473
+ _engine_en: RapidOCR | None = RapidOCR(
474
+ rec_model_path=lf_path('models/en_PP-OCRv3_rec_infer.onnx'),
475
+ use_det=True,
476
+ use_cls=False,
477
+ use_rec=True,
478
+ )
486
479
 
480
+ def jp() -> Ocr:
481
+ """
482
+ 日语 OCR 引擎。
483
+ """
484
+ global _engine_jp
485
+ if _engine_jp is None:
486
+ _engine_jp = RapidOCR(
487
+ rec_model_path=lf_path('models/japan_PP-OCRv3_rec_infer.onnx'),
488
+ use_det=True,
489
+ use_cls=False,
490
+ use_rec=True,
491
+ )
492
+ return Ocr(_engine_jp)
487
493
 
488
- jp = Ocr(_engine_jp)
489
- """日语 OCR 引擎。"""
490
- en = Ocr(_engine_en)
491
- """英语 OCR 引擎。"""
492
-
494
+ def en() -> Ocr:
495
+ """
496
+ 英语 OCR 引擎。
497
+ """
498
+ global _engine_en
499
+ if _engine_en is None:
500
+ _engine_en = RapidOCR(
501
+ rec_model_path=lf_path('models/en_PP-OCRv3_rec_infer.onnx'),
502
+ use_det=True,
503
+ use_cls=False,
504
+ use_rec=True,
505
+ )
506
+ return Ocr(_engine_en)
493
507
 
494
508
 
495
509
  if __name__ == '__main__':
kotonebot/debug_entry.py CHANGED
@@ -2,7 +2,7 @@ import runpy
2
2
  import logging
3
3
  import argparse
4
4
 
5
- from kotonebot.tasks.common import BaseConfig
5
+ from kotonebot.kaa.common import BaseConfig
6
6
 
7
7
 
8
8
  def run_script(script_path: str) -> None:
@@ -2,7 +2,7 @@ import os
2
2
  import json
3
3
  import shutil
4
4
  from importlib import resources
5
- from typing import Literal, Dict, NamedTuple, Tuple, TypeVar, Generic, Any
5
+ from typing import Literal, TypeVar, Any
6
6
  from typing_extensions import assert_never
7
7
  from enum import IntEnum, Enum
8
8
 
@@ -162,7 +162,7 @@ class DailyMoneyShopItems(IntEnum):
162
162
  return [(cls.to_ui_text(item), item) for item in cls if cls._is_note(item)]
163
163
 
164
164
  def to_resource(self):
165
- from . import R
165
+ from kotonebot.kaa.tasks import R
166
166
  match self:
167
167
  case DailyMoneyShopItems.Recommendations:
168
168
  return R.Daily.TextShopRecommended
@@ -357,6 +357,7 @@ class ProduceConfig(ConfigBaseModel):
357
357
  ProduceAction.ALLOWANCE,
358
358
  ProduceAction.OUTING,
359
359
  ProduceAction.STUDY,
360
+ ProduceAction.CONSULT,
360
361
  ProduceAction.REST,
361
362
  ]
362
363
  """
@@ -486,10 +487,10 @@ def conf() -> BaseConfig:
486
487
  return c.options
487
488
 
488
489
  def sprite_path(path: str) -> str:
489
- standalone = os.path.join('kotonebot/tasks/sprites', path)
490
+ standalone = os.path.join('kotonebot/kaa/sprites', path)
490
491
  if os.path.exists(standalone):
491
492
  return standalone
492
- return str(resources.files('kotonebot.tasks.sprites') / path)
493
+ return str(resources.files('kotonebot.kaa.sprites') / path)
493
494
 
494
495
  def upgrade_config() -> str | None:
495
496
  """
@@ -2,7 +2,7 @@ import os
2
2
  import sqlite3
3
3
  from typing import Any, cast
4
4
 
5
- from kotonebot.tasks import resources as res
5
+ from kotonebot.kaa import resources as res
6
6
 
7
7
  _db: sqlite3.Connection | None = None
8
8
  _db_path = cast(str, res.__path__)[0] + '/game.db'
@@ -1,13 +1,7 @@
1
- from dataclasses import dataclass
2
- from typing import Literal, overload
3
-
4
1
  import cv2
5
2
  import numpy as np
6
3
  from cv2.typing import MatLike
7
4
 
8
- from kotonebot.backend.image import TemplateMatchResult
9
-
10
- from kotonebot.tasks import R
11
5
  from kotonebot import action, color, image
12
6
  from kotonebot.backend.color import HsvColor
13
7
  from kotonebot.util import Rect
@@ -94,7 +88,6 @@ class WhiteFilter(HsvColorFilter):
94
88
 
95
89
 
96
90
  if __name__ == '__main__':
97
- from pprint import pprint as print
98
91
  from kotonebot.backend.context import init_context, manual_context, device
99
92
 
100
93
  init_context()
@@ -1,7 +1,7 @@
1
1
  from dataclasses import dataclass
2
2
  from typing import Sequence
3
3
 
4
- from kotonebot.tasks import R
4
+ from ..tasks import R
5
5
  from kotonebot.backend.core import HintBox
6
6
  from kotonebot.backend.color import HsvColor
7
7
  from kotonebot import action, device, ocr, sleep, Rect
@@ -1,4 +1,4 @@
1
- from kotonebot.tasks import R
1
+ from kotonebot.kaa.tasks import R
2
2
  from kotonebot import device, image
3
3
 
4
4
  def expect_yes():
@@ -1,20 +1,17 @@
1
1
  import os
2
2
  import logging
3
- from typing import cast
4
- from importlib import resources
5
3
 
6
4
  import cv2
7
5
  import numpy as np
8
6
  from cv2.typing import MatLike
9
7
 
10
- from kotonebot.tasks import R
11
- from kotonebot.tasks.util import paths
12
- from kotonebot.util import Rect, cv2_imread
13
- from kotonebot.tasks.game_ui import Scrollable
14
- from kotonebot.backend.debug import result, img
15
- from kotonebot import device, color, action, sleep, contains
16
- from kotonebot.tasks.image_db import ImageDatabase, HistDescriptor, FileDataSource
17
- from kotonebot.backend.preprocessor import HsvColorRemover, HsvColorsRemover
8
+ from kotonebot.kaa.tasks import R
9
+ from kotonebot.kaa.util import paths
10
+ from kotonebot.util import Rect
11
+ from kotonebot.kaa.game_ui import Scrollable
12
+ from kotonebot import device, action
13
+ from kotonebot.kaa.image_db import ImageDatabase, HistDescriptor, FileDataSource
14
+ from kotonebot.backend.preprocessor import HsvColorsRemover
18
15
 
19
16
  logger = logging.getLogger(__name__)
20
17
  _db: ImageDatabase | None = None
@@ -152,15 +149,12 @@ def locate_idol(skin_id: str):
152
149
 
153
150
 
154
151
  def test():
155
- from kotonebot.backend.context import init_context, manual_context, device
152
+ from kotonebot.backend.context import init_context, manual_context
156
153
  init_context()
157
154
  manual_context().begin()
158
155
  locate_idol('i_card-skin-fktn-3-006')
159
156
 
160
157
  if __name__ == '__main__':
161
- from pprint import pprint as print
162
-
163
158
  from kotonebot.util import cv2_imread
164
- from kotonebot.backend.preprocessor import HsvColorFilter
165
159
 
166
160
  test()
@@ -2,7 +2,7 @@ from typing import Literal, overload
2
2
 
3
3
  from kotonebot.backend.image import TemplateMatchResult
4
4
 
5
- from kotonebot.tasks import R
5
+ from ..tasks import R
6
6
  from .common import WhiteFilter
7
7
  from kotonebot import action, device, image
8
8
 
@@ -167,7 +167,7 @@ class ImageDatabase:
167
167
 
168
168
 
169
169
  if __name__ == '__main__':
170
- from kotonebot.tasks.image_db.db import Db
170
+ from kotonebot.kaa.image_db.db import Db
171
171
  logging.basicConfig(level=logging.DEBUG, format='[%(asctime)s] [%(levelname)s] [%(name)s] [%(funcName)s] [%(lineno)d] %(message)s')
172
172
  imgs_path = r'E:\GithubRepos\KotonesAutoAssistant.worktrees\dev\kotonebot\tasks\resources\idol_cards'
173
173
  needle_path = r'D:\05.png'
@@ -1,8 +1,9 @@
1
1
  import sys
2
+ import runpy
2
3
  import logging
3
4
  import argparse
4
5
  import importlib.metadata
5
- import runpy
6
+ from datetime import datetime
6
7
 
7
8
  from .kaa import Kaa
8
9
  from kotonebot.backend.context import tasks_from_id, task_registry
@@ -12,10 +13,12 @@ version = importlib.metadata.version('ksaa')
12
13
  # 主命令
13
14
  psr = argparse.ArgumentParser(description='Command-line interface for Kotone\'s Auto Assistant')
14
15
  psr.add_argument('-v', '--version', action='version', version='kaa v' + version)
15
- # psr.add_argument('-c', '--config', required=False, help='Path to the configuration file. Default: ./config.json')
16
+ psr.add_argument('-c', '--config', default='./config.json', help='Path to the configuration file. Default: ./config.json')
17
+ psr.add_argument('-lp', '--log-path', default=None, help='Path to the log file. Does not log to file if not specified. Default: None')
18
+ psr.add_argument('-ll', '--log-level', default='DEBUG', help='Log level. Default: DEBUG')
16
19
 
17
20
  # 子命令
18
- subparsers = psr.add_subparsers(dest='subcommands')
21
+ subparsers = psr.add_subparsers(dest='subcommands', title='Subcommands')
19
22
 
20
23
  # task 子命令
21
24
  task_psr = subparsers.add_parser('task', help='Task related commands')
@@ -37,18 +40,28 @@ _kaa: Kaa | None = None
37
40
  def kaa() -> Kaa:
38
41
  global _kaa
39
42
  if _kaa is None:
40
- _kaa = Kaa()
43
+ _kaa = Kaa(psr.parse_args().config)
41
44
  _kaa.initialize()
42
45
  return _kaa
43
46
 
44
47
  def task_invoke() -> int:
45
48
  tasks_args = psr.parse_args().task_ids
49
+ assert isinstance(tasks_args, list)
46
50
  if not tasks_args:
47
51
  print('No tasks specified.')
48
52
  return -1
49
- kaa().set_log_level(logging.DEBUG)
53
+ # 设置日志
54
+ log_level = getattr(logging, psr.parse_args().log_level, None)
55
+ if log_level is None:
56
+ raise ValueError(f'Invalid log level: {psr.parse_args().log_level}')
57
+ kaa().set_log_level(log_level)
58
+ if psr.parse_args().log_path is not None:
59
+ kaa().add_file_logger(psr.parse_args().log_path)
60
+ # 执行任务
50
61
  print(tasks_args)
51
- if len(tasks_args) == 1 and tasks_args[0] == '*':
62
+ if '*' in tasks_args:
63
+ if len(tasks_args) > 1:
64
+ raise ValueError('Cannot specify other tasks when using wildcard.')
52
65
  kaa().run_all()
53
66
  else:
54
67
  kaa().run(tasks_from_id(tasks_args))
@@ -85,10 +98,14 @@ def main():
85
98
  sys.exit(task_invoke())
86
99
  elif args.task_command == 'list':
87
100
  sys.exit(task_list())
101
+ else:
102
+ raise ValueError(f'Unknown task command: {args.task_command}')
88
103
  elif args.subcommands == 'remote-server':
89
104
  sys.exit(remote_server())
90
105
  elif args.subcommands is None:
106
+ log_filename = datetime.now().strftime('logs/%y-%m-%d-%H-%M-%S.log')
91
107
  kaa().set_log_level(logging.DEBUG)
108
+ kaa().add_file_logger(log_filename)
92
109
  from .gr import main as gr_main
93
110
  gr_main(kaa())
94
111
 
@@ -8,12 +8,12 @@ from typing import List, Dict, Tuple, Literal, Generator
8
8
  import cv2
9
9
  import gradio as gr
10
10
 
11
- from kotonebot.tasks.main import Kaa
12
- from kotonebot.tasks.db import IdolCard
11
+ from kotonebot.kaa.main import Kaa
12
+ from kotonebot.kaa.db import IdolCard
13
13
  from kotonebot.config.manager import load_config, save_config
14
14
  from kotonebot.config.base_config import UserConfig, BackendConfig
15
15
  from kotonebot.backend.context import task_registry, ContextStackVars
16
- from kotonebot.tasks.common import (
16
+ from kotonebot.kaa.common import (
17
17
  BaseConfig, APShopItems, CapsuleToysConfig, ClubRewardConfig, PurchaseConfig, ActivityFundsConfig,
18
18
  PresentsConfig, AssignmentConfig, ContestConfig, ProduceConfig,
19
19
  MissionRewardConfig, DailyMoneyShopItems, ProduceAction,
@@ -1120,7 +1120,7 @@ class KotoneBotUI:
1120
1120
  def _create_whats_new_tab(self) -> None:
1121
1121
  """创建更新日志标签页,并显示最新版本更新内容"""
1122
1122
  with gr.Tab("更新日志"):
1123
- from kotonebot.tasks.metadata import WHATS_NEW
1123
+ from kotonebot.kaa.metadata import WHATS_NEW
1124
1124
  gr.Markdown(WHATS_NEW)
1125
1125
 
1126
1126
  def _create_screen_tab(self) -> None:
@@ -1178,7 +1178,7 @@ class KotoneBotUI:
1178
1178
  return app
1179
1179
 
1180
1180
  def main(kaa: Kaa | None = None) -> None:
1181
- kaa = kaa or Kaa()
1181
+ kaa = kaa or Kaa('./config.json')
1182
1182
  ui = KotoneBotUI(kaa)
1183
1183
  app = ui.create_ui()
1184
1184
  app.launch(inbrowser=True, show_error=True)
@@ -0,0 +1,93 @@
1
+ import io
2
+ import os
3
+ import logging
4
+ import importlib.metadata
5
+ import traceback
6
+ import zipfile
7
+ from datetime import datetime
8
+
9
+ import cv2
10
+
11
+ from kotonebot import KotoneBot
12
+ from ..common import BaseConfig, upgrade_config
13
+
14
+ # 初始化日志
15
+ log_formatter = logging.Formatter('[%(asctime)s][%(levelname)s][%(name)s] %(message)s')
16
+
17
+ console_handler = logging.StreamHandler()
18
+ console_handler.setFormatter(log_formatter)
19
+ console_handler.setLevel(logging.CRITICAL)
20
+
21
+ log_stream = io.StringIO()
22
+ stream_handler = logging.StreamHandler(log_stream)
23
+ stream_handler.setFormatter(logging.Formatter('[%(asctime)s] [%(levelname)s] [%(name)s] [%(filename)s:%(lineno)d] - %(message)s'))
24
+
25
+ root_logger = logging.getLogger()
26
+ root_logger.setLevel(logging.INFO)
27
+ root_logger.addHandler(console_handler)
28
+
29
+ logging.getLogger("kotonebot").setLevel(logging.DEBUG)
30
+
31
+ logger = logging.getLogger(__name__)
32
+
33
+ # 升级配置
34
+ upgrade_msg = upgrade_config()
35
+
36
+ class Kaa(KotoneBot):
37
+ """
38
+ 琴音小助手 kaa 主类。由其他 GUI/TUI 调用。
39
+ """
40
+ def __init__(self, config_path: str):
41
+ super().__init__(module='kotonebot.kaa.tasks', config_path=config_path, config_type=BaseConfig)
42
+ self.upgrade_msg = upgrade_msg
43
+ self.version = importlib.metadata.version('ksaa')
44
+ logger.info('Version: %s', self.version)
45
+
46
+ def add_file_logger(self, log_path: str):
47
+ log_dir = os.path.abspath(os.path.dirname(log_path))
48
+ os.makedirs(log_dir, exist_ok=True)
49
+
50
+ file_handler = logging.FileHandler(log_path, encoding='utf-8')
51
+ file_handler.setFormatter(log_formatter)
52
+ root_logger.addHandler(file_handler)
53
+
54
+ def set_log_level(self, level: int):
55
+ console_handler.setLevel(level)
56
+
57
+ def dump_error_report(
58
+ self,
59
+ exception: Exception,
60
+ *,
61
+ path: str | None = None
62
+ ) -> str:
63
+ """
64
+ 保存错误报告
65
+
66
+ :param path: 保存的路径。若为 `None`,则保存到 `./reports/{YY-MM-DD HH-MM-SS}.zip`。
67
+ :return: 保存的路径
68
+ """
69
+ from kotonebot import device
70
+ from kotonebot.backend.context import current_callstack
71
+ try:
72
+ if path is None:
73
+ path = f'./reports/{datetime.now().strftime("%Y-%m-%d %H-%M-%S")}.zip'
74
+ exception_msg = '\n'.join(traceback.format_exception(exception))
75
+ task_callstack = '\n'.join(
76
+ [f'{i + 1}. name={task.name} priority={task.priority}' for i, task in enumerate(current_callstack)])
77
+ screenshot = device.screenshot()
78
+ logs = log_stream.getvalue()
79
+ with open(self.config_path, 'r', encoding='utf-8') as f:
80
+ config_content = f.read()
81
+
82
+ if not os.path.exists(os.path.dirname(path)):
83
+ os.makedirs(os.path.dirname(path))
84
+ with zipfile.ZipFile(path, 'w') as zipf:
85
+ zipf.writestr('exception.txt', exception_msg)
86
+ zipf.writestr('task_callstack.txt', task_callstack)
87
+ zipf.writestr('screenshot.png', cv2.imencode('.png', screenshot)[1].tobytes())
88
+ zipf.writestr('config.json', config_content)
89
+ zipf.writestr('logs.txt', logs)
90
+ return path
91
+ except Exception as e:
92
+ logger.exception(f'Failed to save error report:')
93
+ return ''