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