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.
- {kotonebot/kaa → kaa}/application/core/idle_mode.py +1 -1
- {kotonebot/kaa → kaa}/application/core/misc_core.py +1 -1
- {kotonebot/kaa → kaa}/common.py +2 -2
- {kotonebot/kaa → kaa}/config/const.py +1 -1
- {kotonebot/kaa → kaa}/config/produce.py +1 -1
- {kotonebot/kaa → kaa}/config/schema.py +10 -1
- kaa/db/drink.py +84 -0
- kaa/db/sqlite.py +42 -0
- {kotonebot → kaa}/debug_entry.py +3 -3
- {kotonebot/kaa → kaa}/errors.py +14 -0
- {kotonebot/kaa → kaa}/game_ui/dialog.py +1 -1
- kaa/game_ui/drinks_overview.py +174 -0
- {kotonebot/kaa → kaa}/game_ui/idols_overview.py +13 -7
- {kotonebot/kaa → kaa}/game_ui/schedule.py +2 -2
- {kotonebot/kaa → kaa}/game_ui/scrollable.py +4 -3
- {kotonebot/kaa → kaa}/image_db/db.py +24 -4
- {kotonebot/kaa → kaa}/main/gr.py +489 -110
- {kotonebot/kaa → kaa}/main/kaa.py +11 -2
- {kotonebot/kaa → kaa}/metadata.py +135 -0
- kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
- kaa/resources/drinks/img_general_pdrink_1-001.png +0 -0
- kaa/resources/drinks/img_general_pdrink_1-002.png +0 -0
- kaa/resources/drinks/img_general_pdrink_1-003.png +0 -0
- kaa/resources/drinks/img_general_pdrink_1-004.png +0 -0
- kaa/resources/drinks/img_general_pdrink_1-006.png +0 -0
- kaa/resources/drinks/img_general_pdrink_1-008.png +0 -0
- kaa/resources/drinks/img_general_pdrink_1-009.png +0 -0
- kaa/resources/drinks/img_general_pdrink_1-010.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-001.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-003.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-004.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-005.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-006.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-007.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-008.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-009.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-010.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-001.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-002.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-004.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-005.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-006.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-007.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-008.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-009.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-010.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-011.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-012.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-013.png +0 -0
- {kotonebot/kaa → kaa}/resources/game.db +0 -0
- kaa/resources/game_ver.txt +0 -0
- kaa/resources/idol_cards/i_card-skin-amao-3-014_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-amao-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-fktn-3-014_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-fktn-3-016_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-fktn-3-016_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-013_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-013_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hrnm-3-013_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hrnm-3-013_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hrnm-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hrnm-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hski-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hski-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hume-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hume-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-jsna-3-014_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-jsna-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kcna-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kcna-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kllj-3-014_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kllj-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-shro-3-014_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-shro-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-shro-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-shro-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-ssmk-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-ssmk-3-015_1.png +0 -0
- kaa/sprites/16db02f4-5297-427d-8c84-587ea5193b53.png +0 -0
- kaa/sprites/207594fa-6a0b-45ec-aeff-b3e45348c508.png +0 -0
- kaa/sprites/7b5c8883-a1f9-4ce9-bd84-26668577dfc6.png +0 -0
- kaa/sprites/9483fae5-3a72-4684-9403-d25d2c602d3d.png +0 -0
- kaa/sprites/a3736105-b3e6-467b-888a-f93b8f4d37be.png +0 -0
- kaa/sprites/ad2f8633-f5a6-4ae8-853d-88b0254b6216.png +0 -0
- kaa/sprites/eaad330d-4e50-4b55-be2c-8da0f72764d9.png +0 -0
- kaa/sprites/f0abbf38-ba4b-474a-bdce-f22db7379de2.png +0 -0
- {kotonebot/kaa → kaa}/tasks/R.py +153 -131
- {kotonebot/kaa → kaa}/tasks/actions/commu.py +3 -3
- {kotonebot/kaa → kaa}/tasks/actions/loading.py +1 -1
- {kotonebot/kaa → kaa}/tasks/actions/scenes.py +5 -3
- {kotonebot/kaa → kaa}/tasks/actions/stats.py +1 -1
- {kotonebot/kaa → kaa}/tasks/daily/acquire_activity_funds.py +2 -2
- {kotonebot/kaa → kaa}/tasks/daily/acquire_presents.py +2 -2
- {kotonebot/kaa → kaa}/tasks/daily/assignment.py +2 -2
- {kotonebot/kaa → kaa}/tasks/daily/capsule_toys.py +4 -3
- {kotonebot/kaa → kaa}/tasks/daily/club_reward.py +3 -3
- {kotonebot/kaa → kaa}/tasks/daily/contest.py +4 -4
- {kotonebot/kaa → kaa}/tasks/daily/mission_reward.py +2 -2
- {kotonebot/kaa → kaa}/tasks/daily/purchase.py +2 -4
- {kotonebot/kaa → kaa}/tasks/daily/upgrade_support_card.py +3 -3
- {kotonebot/kaa → kaa}/tasks/end_game.py +1 -1
- {kotonebot/kaa → kaa}/tasks/produce/cards.py +76 -8
- {kotonebot/kaa → kaa}/tasks/produce/common.py +94 -6
- {kotonebot/kaa → kaa}/tasks/produce/in_purodyuusu.py +96 -73
- {kotonebot/kaa → kaa}/tasks/produce/non_lesson_actions.py +17 -11
- {kotonebot/kaa → kaa}/tasks/produce/p_drink.py +1 -1
- {kotonebot/kaa → kaa}/tasks/produce/produce.py +45 -61
- {kotonebot/kaa → kaa}/tasks/start_game.py +18 -10
- {kotonebot/kaa → kaa}/util/paths.py +1 -1
- {ksaa-2025.8.23.1.dist-info → ksaa-2025.9.dist-info}/METADATA +11 -5
- ksaa-2025.9.dist-info/RECORD +753 -0
- ksaa-2025.9.dist-info/entry_points.txt +2 -0
- ksaa-2025.9.dist-info/top_level.txt +1 -0
- kotonebot/__init__.py +0 -40
- kotonebot/backend/bot.py +0 -302
- kotonebot/backend/color.py +0 -525
- kotonebot/backend/context/__init__.py +0 -3
- kotonebot/backend/context/context.py +0 -1001
- kotonebot/backend/context/task_action.py +0 -176
- kotonebot/backend/core.py +0 -126
- kotonebot/backend/debug/__init__.py +0 -1
- kotonebot/backend/debug/entry.py +0 -89
- kotonebot/backend/debug/mock.py +0 -79
- kotonebot/backend/debug/server.py +0 -223
- kotonebot/backend/debug/vars.py +0 -346
- kotonebot/backend/dispatch.py +0 -228
- kotonebot/backend/flow_controller.py +0 -197
- kotonebot/backend/image.py +0 -748
- kotonebot/backend/loop.py +0 -277
- kotonebot/backend/ocr.py +0 -511
- kotonebot/backend/preprocessor.py +0 -103
- kotonebot/client/__init__.py +0 -10
- kotonebot/client/device.py +0 -500
- kotonebot/client/fast_screenshot.py +0 -378
- kotonebot/client/host/__init__.py +0 -12
- kotonebot/client/host/adb_common.py +0 -94
- kotonebot/client/host/custom.py +0 -114
- kotonebot/client/host/leidian_host.py +0 -202
- kotonebot/client/host/mumu12_host.py +0 -245
- kotonebot/client/host/protocol.py +0 -213
- kotonebot/client/host/windows_common.py +0 -55
- kotonebot/client/implements/__init__.py +0 -7
- kotonebot/client/implements/adb.py +0 -85
- kotonebot/client/implements/adb_raw.py +0 -159
- kotonebot/client/implements/nemu_ipc/__init__.py +0 -8
- kotonebot/client/implements/nemu_ipc/external_renderer_ipc.py +0 -280
- kotonebot/client/implements/nemu_ipc/nemu_ipc.py +0 -327
- kotonebot/client/implements/remote_windows.py +0 -193
- kotonebot/client/implements/uiautomator2.py +0 -82
- kotonebot/client/implements/windows.py +0 -168
- kotonebot/client/protocol.py +0 -69
- kotonebot/client/registration.py +0 -24
- kotonebot/config/__init__.py +0 -1
- kotonebot/config/base_config.py +0 -96
- kotonebot/config/manager.py +0 -36
- kotonebot/errors.py +0 -72
- kotonebot/interop/win/message_box.py +0 -314
- kotonebot/interop/win/reg.py +0 -37
- kotonebot/interop/win/shortcut.py +0 -43
- kotonebot/interop/win/task_dialog.py +0 -469
- kotonebot/kaa/db/sqlite.py +0 -25
- kotonebot/kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
- kotonebot/kaa/resources/game_ver.txt +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-014_0.png +0 -0
- kotonebot/kaa/sprites/87f96abd-8290-4a06-bfc4-c7275cd01d9a.png +0 -0
- kotonebot/kaa/tasks/actions/__init__.py +0 -0
- kotonebot/kaa/tasks/daily/__init__.py +0 -0
- kotonebot/kaa/tasks/produce/__init__.py +0 -0
- kotonebot/logging/__init__.py +0 -2
- kotonebot/logging/log.py +0 -18
- kotonebot/primitives/__init__.py +0 -17
- kotonebot/primitives/geometry.py +0 -290
- kotonebot/primitives/visual.py +0 -63
- kotonebot/tools/__init__.py +0 -0
- kotonebot/tools/mirror.py +0 -354
- kotonebot/ui/__init__.py +0 -0
- kotonebot/ui/file_host/sensio.py +0 -36
- kotonebot/ui/file_host/tmp_send.py +0 -54
- kotonebot/ui/pushkit/__init__.py +0 -3
- kotonebot/ui/pushkit/image_host.py +0 -87
- kotonebot/ui/pushkit/protocol.py +0 -13
- kotonebot/ui/pushkit/wxpusher.py +0 -53
- kotonebot/ui/user.py +0 -144
- kotonebot/util.py +0 -409
- ksaa-2025.8.23.1.dist-info/RECORD +0 -755
- ksaa-2025.8.23.1.dist-info/entry_points.txt +0 -2
- ksaa-2025.8.23.1.dist-info/top_level.txt +0 -1
- {kotonebot/kaa → kaa}/application/adapter/misc_adapter.py +0 -0
- {kotonebot/kaa → kaa}/config/__init__.py +0 -0
- {kotonebot/kaa → kaa}/config/migrations/__init__.py +0 -0
- {kotonebot/kaa → kaa}/config/migrations/_idol.py +0 -0
- {kotonebot/kaa → kaa}/config/migrations/_v1_to_v2.py +0 -0
- {kotonebot/kaa → kaa}/config/migrations/_v2_to_v3.py +0 -0
- {kotonebot/kaa → kaa}/config/migrations/_v3_to_v4.py +0 -0
- {kotonebot/kaa → kaa}/config/migrations/_v4_to_v5.py +0 -0
- {kotonebot/kaa → kaa}/config/migrations/_v5_to_v6.py +0 -0
- {kotonebot/kaa → kaa}/config/upgrade.py +0 -0
- {kotonebot/kaa → kaa}/db/__init__.py +0 -0
- {kotonebot/kaa → kaa}/db/constants.py +0 -0
- {kotonebot/kaa → kaa}/db/idol_card.py +0 -0
- {kotonebot/kaa → kaa}/game_ui/__init__.py +0 -0
- {kotonebot/kaa → kaa}/game_ui/badge.py +0 -0
- {kotonebot/kaa → kaa}/game_ui/common.py +0 -0
- {kotonebot/kaa → kaa}/game_ui/commu_event_buttons.py +0 -0
- {kotonebot/kaa → kaa}/game_ui/primary_button.py +0 -0
- {kotonebot/kaa → kaa}/game_ui/toolbar.py +0 -0
- {kotonebot/kaa → kaa}/image_db/__init__.py +0 -0
- {kotonebot/kaa → kaa}/image_db/descriptors/__init__.py +0 -0
- {kotonebot/kaa → kaa}/image_db/descriptors/hist.py +0 -0
- {kotonebot/kaa → kaa}/kaa_context.py +0 -0
- {kotonebot/kaa → kaa}/main/__init__.py +0 -0
- {kotonebot/kaa → kaa}/main/cli.py +0 -0
- {kotonebot/kaa → kaa}/main/dmm_host.py +0 -0
- {kotonebot/backend → kaa/resources}/__init__.py +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-014_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-015_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-015_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-004_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-004_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-014_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-014_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-014_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-014_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-004_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-004_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-014_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-014_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-004_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-004_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-004_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-004_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-004_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-004_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-004_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-004_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-014_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-014_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-004_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-004_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-014_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-014_1.png +0 -0
- {kotonebot/kaa → kaa}/sprites/00551158-fee9-483f-b034-549139a96f58.png +0 -0
- /kotonebot/kaa/sprites/81b9a59e-5714-459b-b6ce-03e1f4c4e503.png → /kaa/sprites/03f4353c-4160-46d1-97cc-474d7f797f1f.png +0 -0
- /kotonebot/kaa/sprites/2f707d1b-98d5-47b1-a14c-5c7b95a1cc8c.png → /kaa/sprites/055e54c9-753e-4f8b-b6ea-17dc8e0afb61.png +0 -0
- {kotonebot/kaa → kaa}/sprites/05890a1b-8764-4e9f-9d21-65d292c22e13.png +0 -0
- /kotonebot/kaa/sprites/e707f860-027c-44ee-a7a3-b18573b539e3.png → /kaa/sprites/06349609-2e10-483b-91b6-bc590d27d2c5.png +0 -0
- /kotonebot/kaa/sprites/724e9b7b-0bf6-4d78-b887-9b108474e732.png → /kaa/sprites/06842e56-3de1-4076-81c4-bd5466d2eff5.png +0 -0
- {kotonebot/kaa → kaa}/sprites/0949c622-9067-4f0d-bac2-3f938a1d2ed2.png +0 -0
- /kotonebot/kaa/sprites/cc65d34b-b220-451e-a18e-66b05b911e97.png → /kaa/sprites/0a41bec8-19c0-483f-848b-1c79f47debbe.png +0 -0
- /kotonebot/kaa/sprites/be8a47df-79fe-48c1-b41e-77fe1a26a90b.png → /kaa/sprites/0b279fb0-0c30-4767-bf71-4d34cc1ee9cf.png +0 -0
- {kotonebot/kaa → kaa}/sprites/0bf5e34e-afc6-4447-bbac-67026ce2ad26.png +0 -0
- {kotonebot/kaa → kaa}/sprites/0c0627be-4a09-4450-a078-1858d3ace532.png +0 -0
- /kotonebot/kaa/sprites/5df708a6-1383-47a4-aec7-69f492f4f783.png → /kaa/sprites/0c54e162-a97e-402c-a0e6-7ec47e28b788.png +0 -0
- /kotonebot/kaa/sprites/444bc913-a075-4f71-baf8-a94cbb8a8ab0.png → /kaa/sprites/0c78b400-5b9c-4c3c-8973-372d6a10ecd6.png +0 -0
- {kotonebot/kaa → kaa}/sprites/0d9ac648-eefa-4869-ac99-1b0c83649681.png +0 -0
- {kotonebot/kaa → kaa}/sprites/0f7d581d-cea3-4039-9205-732e4cd29293.png +0 -0
- /kotonebot/kaa/sprites/19962647-b587-488b-9ed3-1f4f7ce36406.png → /kaa/sprites/10ef2258-ffc2-4d94-b059-01d2d7f02e2c.png +0 -0
- /kotonebot/kaa/sprites/3d8ab1bb-f8a8-4b19-a565-3b06e1cfe11c.png → /kaa/sprites/10f6e608-9ebb-4198-aaf6-cb2a932891ee.png +0 -0
- /kotonebot/kaa/sprites/f4212619-497f-4dcd-a197-e7c4c1c1a8ad.png → /kaa/sprites/124ffbb0-eed0-4bd9-9f2d-145746eb27a0.png +0 -0
- /kotonebot/kaa/sprites/f162875f-08d7-4a64-a7b2-2fff14497f74.png → /kaa/sprites/134c72e0-4c66-412e-921d-f21d975bfc07.png +0 -0
- /kotonebot/kaa/sprites/f8237a04-9f49-4796-9238-8dfab4cabcbe.png → /kaa/sprites/1522d76b-a91f-4f4e-b3df-02276e7249c8.png +0 -0
- {kotonebot/kaa → kaa}/sprites/1652f06a-5417-49ef-8949-4854772d9ab7.png +0 -0
- /kotonebot/kaa/sprites/80bfcb8e-fb27-4240-85c5-61650419a304.png → /kaa/sprites/16532eae-670d-4708-9396-0dc4070c3027.png +0 -0
- /kotonebot/kaa/sprites/51d0f732-2fe9-40c5-b888-8143270d35bb.png → /kaa/sprites/166d2598-e912-4891-9377-945048ac094a.png +0 -0
- {kotonebot/kaa → kaa}/sprites/16fbc93d-b294-4001-b4e9-ee2af181415f.png +0 -0
- {kotonebot/kaa → kaa}/sprites/185f7838-92a7-460b-9340-f60858948ce9.png +0 -0
- /kotonebot/kaa/sprites/640826ef-c7cf-494c-888a-b151ef418531.png → /kaa/sprites/18ec006e-1a82-45de-9e53-10c54ef1de59.png +0 -0
- {kotonebot/kaa → kaa}/sprites/1926f2f9-4bd7-48eb-9eba-28ec4efb0606.png +0 -0
- /kotonebot/kaa/sprites/b241eff8-039e-4734-bea2-e10da89426d8.png → /kaa/sprites/1b9c5c23-d6b0-4d6c-9cdf-9f5bcc718412.png +0 -0
- /kotonebot/kaa/sprites/c48df972-98fd-4303-99df-9374f542beda.png → /kaa/sprites/1b9f7964-d562-437c-a055-7f5381a740d5.png +0 -0
- /kotonebot/kaa/sprites/97f4f186-da9e-404c-bf1e-918f1b962fee.png → /kaa/sprites/1c04c78a-ad02-4b0a-a4b6-a2ef16134100.png +0 -0
- /kotonebot/kaa/sprites/f79fb63f-1737-4e67-b017-0b34bc93295a.png → /kaa/sprites/1dce8db2-8183-45f5-aaa6-00b4625883d4.png +0 -0
- {kotonebot/kaa → kaa}/sprites/213016c2-c3a2-43d8-86a3-ab4d27666ced.png +0 -0
- {kotonebot/kaa → kaa}/sprites/23d88465-65d9-4718-8725-8dbf0a98a5a4.png +0 -0
- /kotonebot/kaa/sprites/fba7b4b2-46d3-4a5a-a161-6891014e6daf.png → /kaa/sprites/2404d43a-95b5-4bba-9de3-f8a854612701.png +0 -0
- /kotonebot/kaa/sprites/184e517f-f37f-4cc8-ac49-6858025903ee.png → /kaa/sprites/24cb2b15-d55b-4fcd-b02a-81ec7b56cdb6.png +0 -0
- {kotonebot/kaa → kaa}/sprites/24dc7158-036c-4a66-9280-e934f470be53.png +0 -0
- {kotonebot/kaa → kaa}/sprites/24e99232-9434-457f-a9a0-69dd7ecf675f.png +0 -0
- {kotonebot/kaa → kaa}/sprites/25f00ee3-8dfe-42d1-a67e-191fa5c3df4b.png +0 -0
- /kotonebot/kaa/sprites/5661e7a0-9513-4bb6-9549-87b7ad871a0d.png → /kaa/sprites/2a82a975-d4a4-44a5-9755-867f06e6969e.png +0 -0
- /kotonebot/kaa/sprites/53eca690-1c14-4424-9456-3a8397ae9ff3.png → /kaa/sprites/2ace1e32-3a6c-4a7e-951c-3c5e216e190e.png +0 -0
- /kotonebot/kaa/sprites/e2287baf-c165-467b-8b6c-640d1f2ee376.png → /kaa/sprites/2b406314-82d8-407b-a2e6-85b6c67f19f1.png +0 -0
- {kotonebot/kaa → kaa}/sprites/2bd6fe88-99fa-443d-8e42-bb3de5881213.png +0 -0
- /kotonebot/kaa/sprites/d3832642-3108-4947-8274-68ad8a78b690.png → /kaa/sprites/2c7e603e-4524-48f6-afb6-3b226292b5d5.png +0 -0
- /kotonebot/kaa/sprites/a7f4d9cb-d0ee-4abd-b9fa-148c059c7a0f.png → /kaa/sprites/2c9318f4-4aa3-4803-a93f-f39b0177c49f.png +0 -0
- {kotonebot/kaa → kaa}/sprites/2ededcf5-1d80-4e2a-9c83-2a31998331ce.png +0 -0
- /kotonebot/kaa/sprites/c84958c3-37a8-4f1e-9874-45d2c3723b80.png → /kaa/sprites/2fa93a4b-b104-4b35-9ddb-c3098cc6ac8d.png +0 -0
- /kotonebot/kaa/sprites/59f54f2a-1efb-4d5a-b76b-b740ddf561ec.png → /kaa/sprites/3024ea29-3c2a-494f-99c6-f48c90b9e157.png +0 -0
- {kotonebot/kaa → kaa}/sprites/303cccc1-c674-4d3a-8c89-19ea729fdbef.png +0 -0
- {kotonebot/kaa → kaa}/sprites/30a6f399-6999-4f04-bb77-651e0214112f.png +0 -0
- /kotonebot/kaa/sprites/d61df6da-4b09-4b8c-bc97-46632a80fcd9.png → /kaa/sprites/30e3c754-4231-481c-9bf2-ba532503cbd8.png +0 -0
- /kotonebot/kaa/sprites/034203b6-cadb-4b7c-af70-3e9551083457.png → /kaa/sprites/30ea28ac-a7c3-4f60-aaf6-2e641a760ba6.png +0 -0
- /kotonebot/kaa/sprites/649f1c6d-03f8-4e84-87a7-b3418bdb9f61.png → /kaa/sprites/321ee0f9-c89f-4abd-bc7b-020429326361.png +0 -0
- /kotonebot/kaa/sprites/2e76fba4-b9db-47ce-b6a4-d0a857b3fd4b.png → /kaa/sprites/35935996-53ad-47e5-b821-879945df3167.png +0 -0
- {kotonebot/kaa → kaa}/sprites/3942ae40-7f22-412c-aebe-4b064f68db9b.png +0 -0
- /kotonebot/kaa/sprites/5efaf4bf-b3cb-456f-88a1-ff1d28be80c1.png → /kaa/sprites/3b2ccce1-2507-4cfe-afd7-6c584c73fc52.png +0 -0
- {kotonebot/kaa → kaa}/sprites/3b473fe6-e147-477f-b088-9b8fb042a4f6.png +0 -0
- {kotonebot/kaa → kaa}/sprites/3c8b477a-8eda-407e-9e9f-7540c8808f89.png +0 -0
- /kotonebot/kaa/sprites/0b3b7c7d-ad01-44dd-bd25-c819eb002a31.png → /kaa/sprites/3f53fe69-f49e-4a34-86bd-608c74e4f33b.png +0 -0
- {kotonebot/kaa → kaa}/sprites/3f637e86-6b74-4693-9131-1fe411fc21e5.png +0 -0
- /kotonebot/kaa/sprites/bbc8ae86-9ad5-4fc7-8662-05a096ec1b84.png → /kaa/sprites/3f955b28-d82b-4bff-bc90-0b579d7b8304.png +0 -0
- /kotonebot/kaa/sprites/d289f4e1-e92e-4263-93a4-33da4767d7a9.png → /kaa/sprites/3ff71180-76ef-4325-bc67-606bca5bbd8e.png +0 -0
- {kotonebot/kaa → kaa}/sprites/4096cffa-a889-4622-852e-760fc7022d93.png +0 -0
- /kotonebot/kaa/sprites/9a9c9044-53c6-40f7-8eb5-2dc71383e58c.png → /kaa/sprites/41ebad4c-2047-42b4-a008-29db3e918045.png +0 -0
- /kotonebot/kaa/sprites/e38ced13-5ab3-47ee-b10b-63b5ed4224fb.png → /kaa/sprites/43c3ca7f-4d38-4d03-bb68-fa7e0465612a.png +0 -0
- /kotonebot/kaa/sprites/9d87795b-c322-49c6-a9c9-6064828a55a2.png → /kaa/sprites/4454792c-6ebf-4b96-af13-ef1d12531314.png +0 -0
- {kotonebot/kaa → kaa}/sprites/447d0e44-5d87-4b7c-8e60-edb111fe1639.png +0 -0
- {kotonebot/kaa → kaa}/sprites/44ba8515-4a60-42c9-8878-b42e4e34ee15.png +0 -0
- {kotonebot/kaa → kaa}/sprites/4503db6b-7224-4b81-9971-e7cfa56e10f2.png +0 -0
- /kotonebot/kaa/sprites/a8a3d531-9024-4603-a864-64bfe439a9ab.png → /kaa/sprites/45a97ef7-99ef-4ea9-8329-1b0577647bc0.png +0 -0
- {kotonebot/kaa → kaa}/sprites/4695f96b-c4f5-4bb6-a021-a13b6ceb2883.png +0 -0
- {kotonebot/kaa → kaa}/sprites/4883c564-f950-4a29-9f5f-6f924123cd22.png +0 -0
- {kotonebot/kaa → kaa}/sprites/4d78add6-1027-4939-bb51-f99fca7db2ce.png +0 -0
- /kotonebot/kaa/sprites/46abcf20-513c-4759-9976-eaab68be7f8f.png → /kaa/sprites/4f3c19db-154c-438d-b93c-3cc6ad1bc603.png +0 -0
- /kotonebot/kaa/sprites/e734df59-a24f-42e2-9f53-3ca720ddc612.png → /kaa/sprites/4f43aab0-06ef-47e2-9aea-82153cf73d89.png +0 -0
- /kotonebot/kaa/sprites/1cc8c106-1830-433e-956f-7d31a01da99e.png → /kaa/sprites/4f4b72d5-61c5-4d76-a265-84d5c376de80.png +0 -0
- {kotonebot/kaa → kaa}/sprites/5031808b-5525-4118-92b4-317ec8bda985.png +0 -0
- {kotonebot/kaa → kaa}/sprites/50e23c8a-7ba2-4c9c-9cfb-196c260fa1d5.png +0 -0
- {kotonebot/kaa → kaa}/sprites/55f7db71-0a18-4b3d-b847-57959b8d2e32.png +0 -0
- /kotonebot/kaa/sprites/37686733-d013-4580-b255-6db73142c0f6.png → /kaa/sprites/57cdefa6-4168-43f6-b584-a15b46114277.png +0 -0
- {kotonebot/kaa → kaa}/sprites/582d36c0-0916-4706-9833-4fbc026701f5.png +0 -0
- /kotonebot/kaa/sprites/f53ff71d-54b5-44d2-9e48-ad2dee918fd1.png → /kaa/sprites/589bfdd8-9d3a-4c19-a2e6-116824350b6e.png +0 -0
- /kotonebot/kaa/sprites/e072322f-eff1-4cbd-80c2-4e2103a1aa2f.png → /kaa/sprites/5c99c6b4-8a09-4e34-a5a9-496e1188b3b5.png +0 -0
- {kotonebot/kaa → kaa}/sprites/5d36b880-7b3f-49b1-a018-7de59867d376.png +0 -0
- {kotonebot/kaa → kaa}/sprites/5ebcde3b-f0fd-4e5d-b3de-ada8f0b5e03b.png +0 -0
- /kotonebot/kaa/sprites/5e473a8c-bf57-44d8-a711-db1f4ccc182c.png → /kaa/sprites/5fc9e5c2-a8cb-43e3-b0c2-9bca4877b44b.png +0 -0
- /kotonebot/kaa/sprites/97f26adc-071b-4289-8243-dc20e024c7e4.png → /kaa/sprites/686bfe8b-787c-4ad8-852e-0e2c58f6dc42.png +0 -0
- /kotonebot/kaa/sprites/8836e28c-e310-4870-94d2-b58e5dffad49.png → /kaa/sprites/69ac12a4-5ab2-4e64-9508-688b1e7dfdd5.png +0 -0
- {kotonebot/kaa → kaa}/sprites/6b58d90d-2e5e-4b7f-bc01-941f2633de89.png +0 -0
- {kotonebot/kaa → kaa}/sprites/6cd80be8-c9b3-4ba5-bf17-3ffc9b000743.png +0 -0
- /kotonebot/kaa/sprites/64969b0b-a6ef-4342-a967-20428d5baa65.png → /kaa/sprites/6e5a4c13-1e63-4b23-a19f-6d8f4f899b38.png +0 -0
- {kotonebot/kaa → kaa}/sprites/70898bf8-56c5-4f84-becb-629c9ab6a7da.png +0 -0
- /kotonebot/kaa/sprites/15552124-cc5c-4abe-b08d-123624248d77.png → /kaa/sprites/715591f4-19db-4dba-a313-d728ec8aa9f3.png +0 -0
- /kotonebot/kaa/sprites/6e3515d4-68ce-4760-948b-5fb20576fc12.png → /kaa/sprites/71da60b3-a0c2-4211-ba8b-a60a87d046d6.png +0 -0
- /kotonebot/kaa/sprites/814da106-1756-4bce-9140-d2730b635e7e.png → /kaa/sprites/7303cb87-5d31-4725-b40f-4a71b054a473.png +0 -0
- {kotonebot/kaa → kaa}/sprites/74ec3510-583d-4a76-ac69-38480fbf1387.png +0 -0
- /kotonebot/kaa/sprites/725e767e-79bb-4ce6-a448-8ebee80193b7.png → /kaa/sprites/75636434-d148-4855-9a28-7624e066fc43.png +0 -0
- /kotonebot/kaa/sprites/c1c710cd-885b-4b2c-9752-8a2754d0f72d.png → /kaa/sprites/7626a19a-53ce-44f9-8038-5d5f6cb400ec.png +0 -0
- /kotonebot/kaa/sprites/8d595a36-a900-42ea-871f-f17f99d5d73a.png → /kaa/sprites/7644328c-160c-49b0-8040-5de2191acade.png +0 -0
- /kotonebot/kaa/sprites/288ca9e3-237f-4de6-ba06-e586a9f87d03.png → /kaa/sprites/781b0414-4530-47a3-a2b2-dcaa22043bfa.png +0 -0
- /kotonebot/kaa/sprites/b34a76e2-e318-47a0-b194-6e1b01eb269c.png → /kaa/sprites/785e477b-0917-40f3-ad98-0458b816bfa2.png +0 -0
- /kotonebot/kaa/sprites/cac8bff8-569e-450f-8ac7-dad3eebf18d9.png → /kaa/sprites/78ce3025-c313-4dee-9097-96bb0b428584.png +0 -0
- {kotonebot/kaa → kaa}/sprites/79abd239-5eed-4195-9fa8-d729daa874ca.png +0 -0
- /kotonebot/kaa/sprites/ceaa1281-57d5-4c32-b5e2-86781518709b.png → /kaa/sprites/7b0c2c89-8a01-40ee-bfec-f6bd36e3ebd0.png +0 -0
- /kotonebot/kaa/sprites/4fa138a2-4f39-4023-afd4-af5be7df662b.png → /kaa/sprites/7eace29d-0d92-47b2-a6b2-8616fe1f1628.png +0 -0
- /kotonebot/kaa/sprites/8f8f1144-5c30-41f0-8a6b-b39fe78e3e99.png → /kaa/sprites/7fba4fb5-fe30-44c5-90ca-23c40b3e78fb.png +0 -0
- {kotonebot/kaa → kaa}/sprites/81c97cd3-df53-44d3-bf3d-1eb4dc67b62a.png +0 -0
- {kotonebot/kaa → kaa}/sprites/835489e2-b29b-426c-b4c9-3bb9f8eb6195.png +0 -0
- {kotonebot/kaa → kaa}/sprites/83d0a033-466c-463a-bb8c-be0f2953e9b2.png +0 -0
- {kotonebot/kaa → kaa}/sprites/8424ecdd-8857-4764-9fd0-d4bfa440c128.png +0 -0
- /kotonebot/kaa/sprites/974015ca-854d-43e3-a8ed-faa247d304bc.png → /kaa/sprites/8831d905-96e9-454c-9b18-12717a868244.png +0 -0
- /kotonebot/kaa/sprites/32395105-71b0-4f98-a439-c181e82a648e.png → /kaa/sprites/88563ae3-26a5-43b6-92f0-8200639d9dfc.png +0 -0
- /kotonebot/kaa/sprites/6fe17986-a29d-4198-b366-1c40637069b5.png → /kaa/sprites/8b0d963b-5430-4686-97e5-0c7ccdf4a0c9.png +0 -0
- /kotonebot/kaa/sprites/4999097e-2f8b-4965-9e7e-cb9801f8ed0e.png → /kaa/sprites/8b248585-c463-4a01-b189-7bda5f30c508.png +0 -0
- {kotonebot/kaa → kaa}/sprites/8c179a21-be6f-4db8-a9b0-9afeb5c36b1c.png +0 -0
- {kotonebot/kaa → kaa}/sprites/8ded6c98-85ea-4858-a66d-4fc8caecb7c5.png +0 -0
- /kotonebot/kaa/sprites/2af71658-11c3-4c34-b604-003fb8a6a542.png → /kaa/sprites/8f76e6f2-4069-421e-9867-7212e17f7fb3.png +0 -0
- {kotonebot/kaa → kaa}/sprites/8f8b7b46-53bb-42ab-907a-4ea87eb09ab4.png +0 -0
- /kotonebot/kaa/sprites/d67de935-b5f2-4176-ab52-d0482290cb59.png → /kaa/sprites/8fbd928c-1eff-4dd6-8009-fd1a52c7eee5.png +0 -0
- /kotonebot/kaa/sprites/56c4d716-65b3-4fb8-badb-970853544c7a.png → /kaa/sprites/9066e428-a248-46f5-9309-13a7f1ec608e.png +0 -0
- /kotonebot/kaa/sprites/34fd0d97-1018-4986-b990-29e48abc2a56.png → /kaa/sprites/90eb7800-7ec7-494d-91ee-8cec501b67a9.png +0 -0
- {kotonebot/kaa → kaa}/sprites/921eefeb-730e-46fc-9924-d338fb286592.png +0 -0
- {kotonebot/kaa → kaa}/sprites/9340b854-025c-40da-9387-385d38433bef.png +0 -0
- /kotonebot/kaa/sprites/6dacc5c6-85e2-4e26-b7a4-6bda6cc3ed0e.png → /kaa/sprites/9469635b-8fef-470b-907e-f7491d144243.png +0 -0
- /kotonebot/kaa/sprites/fc64316e-8394-4019-a16f-d6e7bb83d9bf.png → /kaa/sprites/94a098bc-8a4e-41be-ac14-0d5528517241.png +0 -0
- /kotonebot/kaa/sprites/647e6110-8c89-4c34-9352-b8b321c61500.png → /kaa/sprites/95c0e57a-6983-4951-b7bc-863a3638a186.png +0 -0
- /kotonebot/kaa/sprites/8af8652d-06fe-4d2c-b123-641c7fbc651d.png → /kaa/sprites/97adcebd-bf26-4155-bc64-ac7d3f59d419.png +0 -0
- /kotonebot/kaa/sprites/d55c4fd9-f8be-467a-923f-03cef8bd0525.png → /kaa/sprites/98699927-81c8-4ddc-a5fc-5d0fe03b4c72.png +0 -0
- /kotonebot/kaa/sprites/44b34d58-8178-416f-88bc-a3c4a5a26bac.png → /kaa/sprites/9ab2e90a-6f3a-442a-a0eb-10a935514656.png +0 -0
- /kotonebot/kaa/sprites/b80cec57-1d9c-4e40-a4d2-df1e1b1546d3.png → /kaa/sprites/9ab3a1a5-40d6-45ca-873d-22c270f264ea.png +0 -0
- /kotonebot/kaa/sprites/62b425ac-3e19-4924-8a58-c085f4d38f56.png → /kaa/sprites/9b70d18f-52b6-4616-9e05-c1c52cb4df7a.png +0 -0
- /kotonebot/kaa/sprites/ccb670dd-7c8e-4bc9-8e73-934ce26d23a8.png → /kaa/sprites/9e893645-1ed3-4cc9-8dea-dad90617f61a.png +0 -0
- {kotonebot/kaa → kaa}/sprites/9fd0753f-c607-4d49-82d1-40bda27e014f.png +0 -0
- {kotonebot/interop/win → kaa/sprites}/__init__.py +0 -0
- {kotonebot/kaa → kaa}/sprites/a0bd6a5f-784d-4f0a-9d66-10f4b80c8d3e.png +0 -0
- {kotonebot/kaa → kaa}/sprites/a1df3af1-a3e7-4521-a085-e4dc3cd1cc57.png +0 -0
- /kotonebot/kaa/sprites/b6f57baa-1d05-464f-81c9-0014063d6656.png → /kaa/sprites/a227e737-e250-483e-ab27-920a050949d5.png +0 -0
- {kotonebot/kaa → kaa}/sprites/a48324ae-7c1a-489e-b3c4-93d12267f88d.png +0 -0
- /kotonebot/kaa/sprites/c32068c9-6e52-4176-98de-fd4d252969dd.png → /kaa/sprites/a552aef0-ddff-4f6f-a4a2-01961cd4456a.png +0 -0
- /kotonebot/kaa/sprites/d88c35b8-f101-4557-b2a5-0f7846fecd4c.png → /kaa/sprites/a6075d44-059b-41b1-b85b-c788465dfd28.png +0 -0
- /kotonebot/kaa/sprites/cf89988c-c930-4890-8a55-018de7a4ae5a.png → /kaa/sprites/a6aa055f-298c-4695-8efd-492159f832f5.png +0 -0
- /kotonebot/kaa/sprites/6e314b73-5ff5-4aa9-9dc3-1ebf28a578a7.png → /kaa/sprites/a8c555f5-d7d5-4ffd-85c7-1fc8bd1014df.png +0 -0
- {kotonebot/kaa → kaa}/sprites/a9fcaf04-0c1f-4b0f-bb5b-ede9da96180f.png +0 -0
- /kotonebot/kaa/sprites/ef601e20-dc47-4c70-a251-4238fde74d49.png → /kaa/sprites/ab075e3f-963f-4a55-9fed-6e4eb9f2c553.png +0 -0
- /kotonebot/kaa/sprites/0bab5a6b-631c-4661-8035-50a03299bd08.png → /kaa/sprites/ab984712-9e57-4c42-ac5e-f90079f2902a.png +0 -0
- {kotonebot/kaa → kaa}/sprites/adc533a7-970b-4c5b-a037-2181531a35d6.png +0 -0
- {kotonebot/kaa → kaa}/sprites/ae9fe233-9acc-4e96-ba8e-1fb1d9bc2ea5.png +0 -0
- {kotonebot/kaa → kaa}/sprites/b0283997-7931-476d-a92f-d7569f6ea34c.png +0 -0
- /kotonebot/kaa/sprites/9ac47ce9-2594-4740-ba70-c61f97c0f992.png → /kaa/sprites/b14d0a2e-9ba8-4196-aafb-beeee7f51767.png +0 -0
- /kotonebot/kaa/sprites/50718df3-1b0e-425f-802c-ca4abd08a4b5.png → /kaa/sprites/b21fa3a4-1aab-46a2-be7a-01d548f2ea9d.png +0 -0
- {kotonebot/kaa → kaa}/sprites/b2af59e9-60e3-4d97-8c72-c7ba092113a3.png +0 -0
- /kotonebot/kaa/sprites/998be65c-b835-4004-bbe0-411a4d74985c.png → /kaa/sprites/b2c45f1d-e548-4eba-b306-b5eb356ff29b.png +0 -0
- {kotonebot/kaa → kaa}/sprites/b2e1bf3c-2c36-4fb5-9db7-c10a29563a37.png +0 -0
- /kotonebot/kaa/sprites/180168f7-9ead-4ce3-9cd9-b1960d649e5c.png → /kaa/sprites/b341f18a-dfcc-4387-b146-061b308f5bea.png +0 -0
- {kotonebot/kaa → kaa}/sprites/b62bf889-da3c-495a-8707-f3bde73efe92.png +0 -0
- {kotonebot/kaa → kaa}/sprites/b6b94f21-ef4b-4425-9c7e-ca2b574b0add.png +0 -0
- /kotonebot/kaa/sprites/71841087-2d73-4726-943a-c784df0b0d2d.png → /kaa/sprites/ba1b392d-ad28-4668-8b91-94d161d1a16d.png +0 -0
- /kotonebot/kaa/sprites/441934e4-3659-4522-985c-0e683eb03f1c.png → /kaa/sprites/ba45b90d-0e6f-4188-a0df-069e2a6914bd.png +0 -0
- {kotonebot/kaa → kaa}/sprites/bab6c393-692c-4681-ac0d-76c0d9dabea6.png +0 -0
- {kotonebot/kaa → kaa}/sprites/bc7155ac-18c9-4335-9ec2-c8762d37a057.png +0 -0
- /kotonebot/kaa/sprites/4c4339dc-c9b2-4a3c-a80a-02512d281289.png → /kaa/sprites/be5c90c5-da5f-40d5-bc5a-3d677abc5795.png +0 -0
- /kotonebot/kaa/sprites/c35208a6-261e-4a2e-aeae-aae19d8c83d6.png → /kaa/sprites/bfb3a923-7b5e-439d-a19a-fd5150ec8443.png +0 -0
- /kotonebot/kaa/sprites/a5e675c9-8fc8-46f2-ae73-bc871d65daaf.png → /kaa/sprites/c0c1a392-bc82-48c2-a304-0587e7038279.png +0 -0
- {kotonebot/kaa → kaa}/sprites/c3f536d6-a04a-4651-b3f9-dd2c22593f7f.png +0 -0
- {kotonebot/kaa → kaa}/sprites/c5b7d67e-7260-4f08-a0e9-4d31ce9bbecf.png +0 -0
- {kotonebot/kaa → kaa}/sprites/c78c38cc-7b61-4dc4-820d-0a5b684ef52e.png +0 -0
- /kotonebot/kaa/sprites/87ee5cea-6fb4-4768-8767-3c422df08371.png → /kaa/sprites/c7daf7d5-42b0-4c38-be47-d3b957211e2a.png +0 -0
- /kotonebot/kaa/sprites/8fad2402-594e-4466-927a-1f83139d7edf.png → /kaa/sprites/c916030c-dc67-4c88-9b86-390c8f66f0c8.png +0 -0
- {kotonebot/kaa → kaa}/sprites/c948f136-416f-447e-8152-54a1cd1d1329.png +0 -0
- {kotonebot/kaa → kaa}/sprites/c954e153-d3e9-4488-869f-d00cfdfac5ee.png +0 -0
- /kotonebot/kaa/sprites/e129c096-35c3-4fd8-b30c-ce92c3c9b85f.png → /kaa/sprites/ca80e346-d3d9-4228-9b92-373467dadadd.png +0 -0
- {kotonebot/kaa → kaa}/sprites/cb3d0ca7-8d14-408a-a2f5-2e25f7b86d6c.png +0 -0
- {kotonebot/kaa → kaa}/sprites/cbf4ce9c-f8d8-4fb7-a197-15bb9847df04.png +0 -0
- {kotonebot/kaa → kaa}/sprites/cc60b509-2ed5-493d-bb9f-333c6d2a6006.png +0 -0
- {kotonebot/kaa → kaa}/sprites/cc8a495d-330d-447d-8a80-a8a6ecc409c5.png +0 -0
- {kotonebot/kaa → kaa}/sprites/ccbcb114-7f73-43d1-904a-3a7ae660c531.png +0 -0
- {kotonebot/kaa → kaa}/sprites/ce1d1d6f-38f2-48bf-98bd-6e091c7ca5b8.png +0 -0
- {kotonebot/kaa → kaa}/sprites/ce20a856-5629-4f8e-a8e1-d1bd14e18e4f.png +0 -0
- /kotonebot/kaa/sprites/28282c09-6ce2-4d65-8475-1fc6fbf54e15.png → /kaa/sprites/cfa95767-6869-42c2-94ec-a2ffeca8179f.png +0 -0
- {kotonebot/kaa → kaa}/sprites/cfc9c8e8-cbe1-49f0-9afa-ead7f9455a2e.png +0 -0
- /kotonebot/kaa/sprites/9dcb4207-f546-4382-a87d-5d3377a31f4f.png → /kaa/sprites/d224df78-a15a-4edc-91c0-c6243c3c43b4.png +0 -0
- {kotonebot/kaa → kaa}/sprites/d271a24f-efe8-424d-8fd5-f6b3756ba4ca.png +0 -0
- /kotonebot/kaa/sprites/d61a93e8-0e24-40d8-814a-402765d057ea.png → /kaa/sprites/d2d4752f-7c62-42d3-8d3a-f5d186bc0e0d.png +0 -0
- {kotonebot/kaa → kaa}/sprites/d3424d31-0502-4623-996e-f0194e5085ce.png +0 -0
- {kotonebot/kaa → kaa}/sprites/d3cc3323-51af-4882-ae12-49e7384b746d.png +0 -0
- /kotonebot/kaa/sprites/2ebe4066-c47c-4284-a52d-b3f5bed523f3.png → /kaa/sprites/d4db176f-8597-4c3e-99e8-a7acc4012df8.png +0 -0
- /kotonebot/kaa/sprites/7f459ed4-063c-48ab-a9ed-48f73bd3a865.png → /kaa/sprites/d53b56af-153c-476c-bab5-1478a66eecb2.png +0 -0
- {kotonebot/kaa → kaa}/sprites/d6b64759-26b7-45b1-bf8e-5c0d98611e0d.png +0 -0
- /kotonebot/kaa/sprites/c38d6852-316f-4a77-9987-e15789ee8612.png → /kaa/sprites/d727e802-443b-4f14-a448-caf53426c488.png +0 -0
- {kotonebot/kaa → kaa}/sprites/d7667903-7149-4f2f-9c15-d8a4b5f4d347.png +0 -0
- {kotonebot/kaa → kaa}/sprites/d83f338d-dde3-494b-9bea-cae511e3517c.png +0 -0
- {kotonebot/kaa → kaa}/sprites/d982d2b5-4bc0-4ae9-a516-f29c2848d64b.png +0 -0
- {kotonebot/kaa → kaa}/sprites/da439e8c-3b74-4371-9657-0736d826c7d1.png +0 -0
- {kotonebot/kaa → kaa}/sprites/daf3d823-b7f1-4584-acf3-90b9d880332c.png +0 -0
- {kotonebot/kaa → kaa}/sprites/db7d3f03-1f7f-43bf-8125-f7c2d345fca2.png +0 -0
- /kotonebot/kaa/sprites/a938bf45-e622-424f-829a-76152586f413.png → /kaa/sprites/dd4987ea-d1a0-4a84-a7b6-6023eb5c4ec8.png +0 -0
- {kotonebot/kaa → kaa}/sprites/de325534-3fd3-480a-9eb8-eb47960a753a.png +0 -0
- /kotonebot/kaa/sprites/cdd7bbc5-8ebd-4a5c-84ca-0e7ca7702d8f.png → /kaa/sprites/de9bbc4c-6d29-422f-8f29-82870270efb3.png +0 -0
- /kotonebot/kaa/sprites/6a77517b-99b1-42a1-ba61-a3109151339e.png → /kaa/sprites/dedc30bf-4a69-4bec-b3f7-c3b1fcf61283.png +0 -0
- {kotonebot/kaa → kaa}/sprites/df991b42-ed8e-4f2c-bf0c-aa7522f147b6.png +0 -0
- /kotonebot/kaa/sprites/87b36188-2bf9-4b56-98cf-9e8df3879dbf.png → /kaa/sprites/e149613e-d126-42f8-94c9-180cf2244041.png +0 -0
- {kotonebot/kaa → kaa}/sprites/e4683def-8d1d-472b-a5ab-bb3885c0c98e.png +0 -0
- /kotonebot/kaa/sprites/f68eb4f1-b30b-43fc-8a24-11394cc759d2.png → /kaa/sprites/e56f125e-1b4b-48ea-be9c-256496f91f6f.png +0 -0
- {kotonebot/kaa → kaa}/sprites/e5e84f9e-28da-4cf4-bcba-c9145fe39b07.png +0 -0
- /kotonebot/kaa/sprites/8dfc96b9-678a-4126-914a-8b5ba920e280.png → /kaa/sprites/e5f0644a-26a7-4d00-a5c8-2e6263b0e547.png +0 -0
- /kotonebot/kaa/sprites/5af6d58e-52c5-47fd-8ea5-c2fa8bb67e99.png → /kaa/sprites/e62398fa-f25e-4a1b-86d6-f89ec096cc27.png +0 -0
- /kotonebot/kaa/sprites/7465297a-497d-41fa-948d-7f04ad5fdc94.png → /kaa/sprites/e65f87fe-3a59-4465-90cd-5167fb3aa4ae.png +0 -0
- {kotonebot/kaa → kaa}/sprites/e6b45405-cd9f-4c6e-a9f1-6ec953747c65.png +0 -0
- /kotonebot/kaa/sprites/cca278bb-88cb-4898-8bbe-f52a49a0f740.png → /kaa/sprites/e772ae1e-3c75-417c-bd36-52b5fa046cf9.png +0 -0
- /kotonebot/kaa/sprites/38526b38-7f62-466b-8702-0c657891c7fa.png → /kaa/sprites/e80f5d59-6c4a-4d40-8fd2-7ccfc8f20d08.png +0 -0
- {kotonebot/kaa → kaa}/sprites/e88c9ad1-ec37-4fcd-b086-862e1e7ce8fd.png +0 -0
- /kotonebot/kaa/sprites/32966af9-8bfe-4b67-b9b5-2fd5e2678468.png → /kaa/sprites/e8ef0ab6-9132-410d-ad44-c6bbdda8298a.png +0 -0
- {kotonebot/kaa → kaa}/sprites/e9ee330d-dfca-440e-8b8c-0a3b4e8c8730.png +0 -0
- {kotonebot/kaa → kaa}/sprites/ea1ba124-9cb3-4427-969a-bacd47e7d920.png +0 -0
- {kotonebot/kaa → kaa}/sprites/eaba6ebe-f0df-4918-aee5-ef4e3ffedcf0.png +0 -0
- /kotonebot/kaa/sprites/1989466d-c486-4e0c-acc9-ed3116e3c0b8.png → /kaa/sprites/ecd053a6-3791-4535-8e7f-65c740619fc5.png +0 -0
- /kotonebot/kaa/sprites/0411b7d9-8f30-44c8-ad51-fde15025ab5f.png → /kaa/sprites/edecb8c9-60b8-4576-8c56-03a33f0a2496.png +0 -0
- {kotonebot/kaa → kaa}/sprites/ee4e512b-4982-49b6-9c71-31984b58e1d0.png +0 -0
- /kotonebot/kaa/sprites/24b645e9-66a6-4c4b-8273-c895ba6b8324.png → /kaa/sprites/ee775922-936a-4445-85fc-0a2607fea917.png +0 -0
- {kotonebot/kaa → kaa}/sprites/eef25cf9-afd0-43b1-b9c5-fbd997bd5fe0.png +0 -0
- /kotonebot/kaa/sprites/cdbf1f7f-63f6-40d7-a3b6-3d64bd6f9083.png → /kaa/sprites/ef0226e3-6bad-4b40-9056-7dc2952b4de9.png +0 -0
- /kotonebot/kaa/sprites/a43abe98-376b-4da7-ab17-b6c9e1a875fb.png → /kaa/sprites/ef84cc0f-4699-4514-8d1f-cf1ca30ce790.png +0 -0
- {kotonebot/kaa → kaa}/sprites/f1f21925-3e22-4dd1-b53b-bb52bcf26c2b.png +0 -0
- {kotonebot/kaa → kaa}/sprites/f43c313b-8a7b-467b-8442-fc5bcb8b4388.png +0 -0
- {kotonebot/kaa → kaa}/sprites/f5c16d2f-ebc5-4617-9b96-971696af7c52.png +0 -0
- {kotonebot/kaa → kaa}/sprites/f6ca6bd3-543f-4779-8367-c5c883f04b95.png +0 -0
- /kotonebot/kaa/sprites/c107e00b-f94f-4526-88f5-2eae03a7d7f6.png → /kaa/sprites/f6f8e8b4-6426-43b0-b3e6-020401a1da3f.png +0 -0
- /kotonebot/kaa/sprites/395a07be-38b7-4c8c-948e-9efcb93a2e49.png → /kaa/sprites/f7f6a9d8-13cb-4c19-b43f-ca0e4b9176d5.png +0 -0
- /kotonebot/kaa/sprites/88456f07-23f0-48f7-ac81-206312717095.png → /kaa/sprites/f8b12dfa-bef8-41eb-a325-e7dd73c14124.png +0 -0
- /kotonebot/kaa/sprites/faeb1498-1c11-4bc7-8e85-864fd876751c.png → /kaa/sprites/f9a04314-15b1-41bb-9e7f-670d952973ce.png +0 -0
- {kotonebot/kaa → kaa}/sprites/fad5eec2-5fd5-412f-9abb-987a3087dc54.png +0 -0
- {kotonebot/kaa → kaa/tasks}/__init__.py +0 -0
- {kotonebot/kaa/resources → kaa/tasks/actions}/__init__.py +0 -0
- {kotonebot/kaa → kaa}/tasks/clear_logs.py +0 -0
- {kotonebot/kaa/sprites → kaa/tasks/daily}/__init__.py +0 -0
- {kotonebot/kaa/tasks → kaa/tasks/produce}/__init__.py +0 -0
- {kotonebot/kaa → kaa}/util/trace.py +0 -0
- {ksaa-2025.8.23.1.dist-info → ksaa-2025.9.dist-info}/WHEEL +0 -0
- {ksaa-2025.8.23.1.dist-info → ksaa-2025.9.dist-info}/licenses/LICENSE +0 -0
{kotonebot/kaa → kaa}/main/gr.py
RENAMED
|
@@ -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
|
|
18
|
-
from
|
|
19
|
-
from
|
|
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
|
|
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
|
|
34
|
-
from
|
|
35
|
-
from
|
|
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
|
-
#
|
|
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=
|
|
239
|
-
get_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(
|
|
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(
|
|
657
|
+
gr.Success(success_msg)
|
|
659
658
|
else:
|
|
660
|
-
gr.Warning(
|
|
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
|
-
|
|
676
|
-
|
|
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.
|
|
680
|
-
fn=lambda 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.
|
|
684
|
-
fn=lambda 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.
|
|
688
|
-
fn=lambda 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.
|
|
692
|
-
fn=lambda 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.
|
|
696
|
-
fn=lambda 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.
|
|
700
|
-
fn=lambda 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.
|
|
704
|
-
fn=lambda 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.
|
|
708
|
-
fn=lambda 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.
|
|
712
|
-
fn=lambda 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
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
|
-
|
|
817
|
-
|
|
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
|
|
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="
|
|
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="
|
|
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="
|
|
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(
|
|
961
|
+
def on_pause_click() -> str:
|
|
862
962
|
return self.toggle_pause()
|
|
863
963
|
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
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=
|
|
878
|
-
outputs=[
|
|
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 == '
|
|
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 == '
|
|
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 == '
|
|
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: #
|
|
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 ==
|
|
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 ==
|
|
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
|
|
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)
|