ksaa 2025.5.16.0__py3-none-any.whl → 2025.5.23.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kotonebot/__init__.py +0 -2
- kotonebot/backend/bot.py +19 -34
- kotonebot/backend/color.py +20 -17
- kotonebot/backend/context/context.py +41 -8
- kotonebot/backend/core.py +7 -30
- kotonebot/backend/dispatch.py +1 -1
- kotonebot/backend/image.py +26 -26
- kotonebot/backend/ocr.py +18 -17
- kotonebot/backend/preprocessor.py +0 -1
- kotonebot/client/__init__.py +8 -1
- kotonebot/client/device.py +7 -20
- kotonebot/client/factory.py +33 -5
- kotonebot/client/host/__init__.py +8 -1
- kotonebot/client/host/custom.py +7 -2
- kotonebot/client/host/leidian_host.py +200 -0
- kotonebot/client/host/mumu12_host.py +169 -0
- kotonebot/client/host/protocol.py +68 -38
- kotonebot/client/implements/adb.py +1 -1
- kotonebot/client/protocol.py +1 -1
- kotonebot/config/base_config.py +8 -3
- kotonebot/interop/win/reg.py +37 -0
- kotonebot/kaa/common.py +18 -2
- kotonebot/kaa/game_ui/badge.py +6 -6
- kotonebot/kaa/game_ui/common.py +6 -6
- kotonebot/kaa/game_ui/commu_event_buttons.py +4 -3
- kotonebot/kaa/game_ui/idols_overview.py +6 -6
- kotonebot/kaa/game_ui/schedule.py +162 -0
- kotonebot/kaa/game_ui/scrollable.py +7 -6
- kotonebot/kaa/kaa_context.py +8 -0
- kotonebot/kaa/main/cli.py +7 -0
- kotonebot/kaa/main/dmm_host.py +53 -0
- kotonebot/kaa/main/gr.py +497 -298
- kotonebot/kaa/main/kaa.py +77 -1
- kotonebot/kaa/metadata.py +21 -0
- kotonebot/kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
- kotonebot/kaa/resources/game.db +0 -0
- kotonebot/kaa/resources/game_ver.txt +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-amao-3-010_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-amao-3-011_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-amao-3-011_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-1-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-1-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-1-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-1-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-2-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-2-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-002_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-002_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-003_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-003_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-005_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-005_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-006_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-006_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-007_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-007_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-008_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-008_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-009_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-009_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-010_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-010_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-011_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-011_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-012_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-012_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/resources/idol_cards/i_card-skin-hrnm-1-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-1-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-1-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-1-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-2-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-2-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-002_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-002_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-003_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-003_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-004_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-004_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-005_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-005_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-006_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-006_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-007_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-007_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-008_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-008_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-009_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-009_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-010_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-010_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-011_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hrnm-3-011_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-1-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-1-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-1-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-1-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-2-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-2-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-002_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-002_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-003_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-003_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-005_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-005_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-006_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-006_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-007_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-007_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-008_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-008_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-009_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-009_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-010_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-010_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-011_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-011_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-012_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hski-3-012_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-1-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-1-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-2-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-2-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-002_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-002_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-004_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-004_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-005_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-005_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-006_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-006_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-011_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-3-011_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-1-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-1-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-2-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-2-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-002_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-002_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-003_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-003_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-004_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-004_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-005_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-005_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-006_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-006_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-010_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-010_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-1-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-1-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-1-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-1-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-2-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-2-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-002_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-002_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-003_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-003_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-004_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-004_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-005_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-005_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-006_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-006_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-007_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-007_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-008_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-008_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-009_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-009_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-010_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-010_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-011_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-011_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-1-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-1-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-1-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-1-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-2-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-2-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-002_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-002_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-004_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-004_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-005_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-005_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-006_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-006_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-007_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-007_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-008_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-008_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-009_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-009_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-010_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-010_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-011_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-011_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-1-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-1-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-1-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-1-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-2-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-2-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-002_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-002_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-003_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-003_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-004_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-004_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-006_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-006_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-007_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-007_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-008_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-008_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-009_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-009_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-010_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-010_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-011_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-011_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-1-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-1-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-1-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-1-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-2-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-2-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-002_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-002_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-003_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-003_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-005_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-005_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-006_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-006_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-007_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-007_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-008_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-008_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-009_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-009_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-010_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-010_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-011_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-011_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-1-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-1-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-1-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-1-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-2-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-2-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-000_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-000_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-002_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-002_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-003_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-003_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-004_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-004_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-006_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-006_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-007_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-007_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-008_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-008_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-009_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-009_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-010_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-010_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-011_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-011_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-012_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-012_1.png +0 -0
- kotonebot/kaa/sprites/4503db6b-7224-4b81-9971-e7cfa56e10f2.png +0 -0
- kotonebot/kaa/tasks/R.py +137 -133
- kotonebot/kaa/tasks/daily/contest.py +123 -89
- kotonebot/kaa/tasks/daily/mission_reward.py +4 -4
- kotonebot/kaa/tasks/end_game.py +2 -9
- kotonebot/kaa/tasks/produce/cards.py +7 -6
- kotonebot/kaa/tasks/produce/common.py +16 -12
- kotonebot/kaa/tasks/produce/in_purodyuusu.py +5 -5
- kotonebot/kaa/tasks/produce/p_drink.py +4 -3
- kotonebot/kaa/tasks/produce/produce.py +5 -3
- kotonebot/kaa/tasks/start_game.py +2 -2
- kotonebot/primitives/__init__.py +17 -0
- kotonebot/primitives/geometry.py +290 -0
- kotonebot/primitives/visual.py +63 -0
- kotonebot/util.py +20 -20
- {ksaa-2025.5.16.0.dist-info → ksaa-2025.5.23.0.dist-info}/METADATA +1 -1
- ksaa-2025.5.23.0.dist-info/RECORD +645 -0
- {ksaa-2025.5.16.0.dist-info → ksaa-2025.5.23.0.dist-info}/WHEEL +1 -1
- ksaa-2025.5.16.0.dist-info/RECORD +0 -358
- /kotonebot/{client/host/mumu_host.py → interop/win/__init__.py} +0 -0
- /kotonebot/kaa/sprites/{d9d3b9b8-39b5-49fc-ad91-b3b6a1e270fa.png → 03a1da2f-c46d-47ce-a4a5-dbe3dee15154.png} +0 -0
- /kotonebot/kaa/sprites/{c31fa18a-3af7-4a0d-aad4-b0c62f6b3d14.png → 0590d364-2d8a-4743-b3c6-8b06a8902eba.png} +0 -0
- /kotonebot/kaa/sprites/{443ad895-1036-4ab1-b983-c3d9a2c7226d.png → 059e36cb-256b-409d-af50-2d6bbcda2991.png} +0 -0
- /kotonebot/kaa/sprites/{0ac97790-df7e-4ec1-8642-99c83706a6ca.png → 0712678b-e13f-49c2-b144-4a3d3e342836.png} +0 -0
- /kotonebot/kaa/sprites/{95e6fce9-3b7f-4632-8995-f61555fe4f7c.png → 0888b793-4084-479b-a3bb-1ad5e0de1f63.png} +0 -0
- /kotonebot/kaa/sprites/{2ebc9910-ffcf-4ee8-bcbd-12208b9512da.png → 0941ec23-b5c7-4513-b5d6-3e65a84eaec6.png} +0 -0
- /kotonebot/kaa/sprites/{3d26b141-6763-4411-9ed6-404cc86d0f8b.png → 0a9cf832-adb9-4f8e-9e19-a7283934ee51.png} +0 -0
- /kotonebot/kaa/sprites/{3e299105-9996-40f4-9635-9756f3ff5890.png → 10dd5320-7d5c-4901-a9aa-3a8cdd6eee0f.png} +0 -0
- /kotonebot/kaa/sprites/{1a02dd8a-0e4c-4bb4-9270-58081f569c6b.png → 13530bef-a2cc-4ae4-b435-b56d370a08a4.png} +0 -0
- /kotonebot/kaa/sprites/{a5d12211-9613-446a-ac70-00c4268e845b.png → 17d6c160-56a9-46f3-bc08-e85e85984c29.png} +0 -0
- /kotonebot/kaa/sprites/{13057f1f-7340-4609-a50f-3b00b3d8be6e.png → 18412951-a2a4-4098-ac93-e36f951fe6a3.png} +0 -0
- /kotonebot/kaa/sprites/{14787e5f-9244-4f75-896f-e06d1c50ccdf.png → 191af9b6-75ec-4b9c-9cd8-acb8073670fc.png} +0 -0
- /kotonebot/kaa/sprites/{8f68d079-0bea-4dae-9a75-b5a4d6c5ce14.png → 1ab5a8b6-4a8d-4964-b867-e030dbcb8cea.png} +0 -0
- /kotonebot/kaa/sprites/{07df5a1f-b7a3-4bbc-9b5a-66834e045f7c.png → 21e349ce-6b24-4978-800b-64bb023dac4c.png} +0 -0
- /kotonebot/kaa/sprites/{09dfc448-db96-4de8-ac00-ff9f65faa234.png → 22a9c3ad-79f8-4840-badc-679ffb563862.png} +0 -0
- /kotonebot/kaa/sprites/{ca72955d-a875-4099-a05c-a6c05abb5bde.png → 24e2bee3-a981-4acb-a6d4-ba558ecdb447.png} +0 -0
- /kotonebot/kaa/sprites/{0b925b55-6768-474c-a164-77d343c5a5cc.png → 24f4e1b3-3697-48c8-b253-147c32099c7d.png} +0 -0
- /kotonebot/kaa/sprites/{4bcc6f68-ad84-442f-949c-8881b999b99b.png → 2683cb88-4e76-48df-875e-571c1be71262.png} +0 -0
- /kotonebot/kaa/sprites/{ecbbddd8-4f8d-4cd2-a3f8-5f3aa9f31693.png → 292d2da1-f9a0-43e3-9ae2-b0d9dbc0eade.png} +0 -0
- /kotonebot/kaa/sprites/{4b83bf6a-d158-4fca-a226-dd22867f3b7b.png → 2aa3af38-e76b-46bd-b607-a1e0fa203e53.png} +0 -0
- /kotonebot/kaa/sprites/{edab4736-e1ea-485f-b54e-a188a70d9f62.png → 2ab660e8-865a-41d9-acec-ab6b002f85bf.png} +0 -0
- /kotonebot/kaa/sprites/{d61d8f0d-dbfd-484d-a5eb-b64f9017cc28.png → 2e01ea79-ed1b-46c6-a60d-61762e70356e.png} +0 -0
- /kotonebot/kaa/sprites/{bd9f1e28-ec69-4b5f-bbca-b47d23a4cfb6.png → 2fd3276f-de84-4696-83fd-233f6b8f3b65.png} +0 -0
- /kotonebot/kaa/sprites/{2585f6f2-ab8d-42ac-a34e-9c7b97ff35fe.png → 3011e930-0a44-411a-a51c-9674559a7a79.png} +0 -0
- /kotonebot/kaa/sprites/{3081df2a-ad37-4fe7-9af6-82178a66ac28.png → 305f4efc-44aa-40a3-829a-cbfb11667e70.png} +0 -0
- /kotonebot/kaa/sprites/{13f5018a-374a-4a57-91fc-773e15541a87.png → 315be5ba-6a88-477d-829a-36d1a0c20d5b.png} +0 -0
- /kotonebot/kaa/sprites/{bc4aac55-16cf-4d73-aeb0-41c63116c2a8.png → 31e62cdf-febe-41d5-a9cb-864dd979c110.png} +0 -0
- /kotonebot/kaa/sprites/{f4a2ad25-d5af-435c-863c-e537bfc007ec.png → 32173834-1127-4d24-ae38-7e39aa285383.png} +0 -0
- /kotonebot/kaa/sprites/{26e4ae32-63b3-4018-8bd7-67bf7975693d.png → 3899fdd3-1e6c-426f-84fc-07fc7f142285.png} +0 -0
- /kotonebot/kaa/sprites/{cd5a9174-8e78-494d-8a59-b4036ea47235.png → 3a9e305c-3bfb-4e03-b516-5d2f1fdde3ac.png} +0 -0
- /kotonebot/kaa/sprites/{79b72a12-5ca1-4d9d-b110-03d85082ea2c.png → 3af1f5c7-bc33-48c8-96bd-9de2060a6cd2.png} +0 -0
- /kotonebot/kaa/sprites/{858a892b-b416-46ac-a794-2d8d54fc75aa.png → 3da30a90-8e12-4467-9c2a-9f329b12fff3.png} +0 -0
- /kotonebot/kaa/sprites/{17daea0a-8d57-4da2-a8cc-e0e9121b5e9b.png → 3ea127da-166d-4ff1-9748-b52985b7a426.png} +0 -0
- /kotonebot/kaa/sprites/{675c3811-a589-4586-b9b7-22342ff7469b.png → 3f0d4968-8c48-4f6a-ba8c-55fda72dc7e0.png} +0 -0
- /kotonebot/kaa/sprites/{a7be4b5c-f118-4738-8a2a-488479f94775.png → 41d5bd29-838b-4365-a2b8-0c7d3e6d8040.png} +0 -0
- /kotonebot/kaa/sprites/{31c40070-8b76-476e-ade5-fc159f924157.png → 442d7deb-2dec-4b61-afb9-00c21a756724.png} +0 -0
- /kotonebot/kaa/sprites/{b8d57489-74d7-4657-818e-865f60fa5d30.png → 4575ec70-0147-4287-b2ab-e78e9622072c.png} +0 -0
- /kotonebot/kaa/sprites/{1911a19a-83b1-42d4-b04b-96ca67b2da39.png → 4586b495-4151-434b-ba97-693f31cfe017.png} +0 -0
- /kotonebot/kaa/sprites/{4ca90fd6-fd9b-4eb7-b9d7-83e7ac77a641.png → 49dcd6ac-407a-415a-a237-2425a9aed30d.png} +0 -0
- /kotonebot/kaa/sprites/{37a8fa3f-d6d6-46c8-8489-4a6ee0496eef.png → 4b2aa727-048b-4120-81a2-3c11e2492146.png} +0 -0
- /kotonebot/kaa/sprites/{61db88d2-63d3-4078-abc6-34457c00c218.png → 4c315af5-32b9-43a4-8e7d-15cf353bcb03.png} +0 -0
- /kotonebot/kaa/sprites/{c3a4297d-3db5-4e20-be48-2fd25d1bed17.png → 4c9a62ad-7c12-4093-b8c9-b9074112bc41.png} +0 -0
- /kotonebot/kaa/sprites/{35a1eb9e-606f-4fa4-8a70-918c66966c02.png → 4d1dc493-9d1a-46a8-86a3-61b6eeb44166.png} +0 -0
- /kotonebot/kaa/sprites/{bca88684-b9c6-49dc-ac92-814fe92148dd.png → 52792418-b921-43ce-a359-5fe0c16e78d2.png} +0 -0
- /kotonebot/kaa/sprites/{6b9db525-2802-4808-9995-b3a140629164.png → 54bd3138-a66a-45ee-950b-72e2aeb99143.png} +0 -0
- /kotonebot/kaa/sprites/{4fb71269-89d1-4e8a-b7cc-792ab2939bfc.png → 59c4b7d6-b97d-4ef0-bd8c-fc4a524a2ec8.png} +0 -0
- /kotonebot/kaa/sprites/{b312d4fc-0852-4bdc-bcaa-2b363b0bf5c0.png → 5a31f717-083b-4086-9eaf-ed131982f22f.png} +0 -0
- /kotonebot/kaa/sprites/{0aa9b79e-66c2-47b0-8ed6-65bac3414978.png → 5bb9b015-9895-4180-917f-cb01e549e3fd.png} +0 -0
- /kotonebot/kaa/sprites/{a8a81cd1-4c22-4775-8ae5-d1f62bc57304.png → 5c68a4a5-c221-4095-ad60-bc15fd207b8b.png} +0 -0
- /kotonebot/kaa/sprites/{639c3876-8b07-432a-a68f-a6d7224e5f05.png → 5ca2f04c-16ce-491a-ac5f-fe1426a3ba7f.png} +0 -0
- /kotonebot/kaa/sprites/{4e5fce30-4af9-43ef-9616-efa6ed54cd01.png → 5eba9fd5-edc8-4621-b97f-d2654cf9b64e.png} +0 -0
- /kotonebot/kaa/sprites/{8fc1bd07-e694-484b-a6e2-e1b3f69eff18.png → 5f9b7109-335e-4b5a-b0e9-34590b693976.png} +0 -0
- /kotonebot/kaa/sprites/{96457160-95bf-48f4-a55b-0555a90a153f.png → 5fbede88-6f22-43c7-a6c5-e457470c30ce.png} +0 -0
- /kotonebot/kaa/sprites/{296c5ced-cb5b-433f-9afe-8158991d71b8.png → 62cecda6-30aa-4e25-b74a-fe7726d3cd75.png} +0 -0
- /kotonebot/kaa/sprites/{3860250d-829a-4000-adeb-6c5e646b1059.png → 65946928-f48f-48fa-b561-f44b8db7f5ef.png} +0 -0
- /kotonebot/kaa/sprites/{787d1557-7329-40a3-b543-6326cff0b95c.png → 66f9d590-ae1d-4c29-8b2b-72be465457ae.png} +0 -0
- /kotonebot/kaa/sprites/{03b42595-7196-4671-b6ea-1e93def3277b.png → 6763a087-099a-425c-875d-1586f5d3d624.png} +0 -0
- /kotonebot/kaa/sprites/{be3d4c92-55d2-49c2-bac8-caab183bf23a.png → 6995892d-5f99-4e40-9849-3f9ef8bf7bdb.png} +0 -0
- /kotonebot/kaa/sprites/{8c9a212d-8e2a-4244-9b45-17022b960e6c.png → 6b6f0f50-086b-498b-89bc-b2abc0e2b723.png} +0 -0
- /kotonebot/kaa/sprites/{b2f70e7b-8c88-4a78-86f8-3456028b9b22.png → 6b7cb3b3-edff-4668-acaa-92cc3fa035f9.png} +0 -0
- /kotonebot/kaa/sprites/{2c9d6bcf-7b64-4d2c-a55d-aa33a67823fc.png → 6c793707-0535-4146-b53c-3d8c1c0d8c2f.png} +0 -0
- /kotonebot/kaa/sprites/{31e65902-3be2-4f2e-9070-d744588262cc.png → 6e213f63-8915-4d69-922a-03e5f09c409d.png} +0 -0
- /kotonebot/kaa/sprites/{26ea9d6d-390e-41d8-b698-d6ec717a75d0.png → 71c7edb4-f638-4b87-a066-5ac6d0ceafcc.png} +0 -0
- /kotonebot/kaa/sprites/{7dd54352-336a-4074-9ca9-301d3da480e1.png → 7283ab2c-0c5c-4d60-b86f-2e8382a2dca0.png} +0 -0
- /kotonebot/kaa/sprites/{4aace3d3-ea8e-455c-a13b-949db602f803.png → 73b64703-2352-4a86-b40f-1e6e416fdd58.png} +0 -0
- /kotonebot/kaa/sprites/{2c7f7e34-d744-43cb-8922-551e19ba1afc.png → 789ac59e-aeae-4f4b-9086-e075e7a05718.png} +0 -0
- /kotonebot/kaa/sprites/{d0f33568-3680-4094-9db1-ebe688904c2f.png → 7ccc662f-6727-49eb-a7de-fe28e14b949f.png} +0 -0
- /kotonebot/kaa/sprites/{5512d8e2-cd55-4cd1-9907-ba83aed0e286.png → 7d7f5644-3de6-48b2-bb12-6ab61657997a.png} +0 -0
- /kotonebot/kaa/sprites/{f59828c3-f7ca-4f0e-bd0f-d52a7f8a4973.png → 8488a18d-98fb-4cb6-bc63-3055e746e3df.png} +0 -0
- /kotonebot/kaa/sprites/{3b5797e4-fedc-486b-a783-82f1c3975d9c.png → 84b1a4ed-f9d3-4627-a35a-0f38096b919c.png} +0 -0
- /kotonebot/kaa/sprites/{cc69f584-8c89-4e8b-ab23-1f33cd828f8f.png → 85ea2edc-b508-4b23-bcc8-1277e8cb05b2.png} +0 -0
- /kotonebot/kaa/sprites/{47829c45-453c-4a3e-abaa-bf5c899514b7.png → 86033fa1-a02d-4307-8d01-ae37a873f650.png} +0 -0
- /kotonebot/kaa/sprites/{fc945167-368e-44a8-9e48-78df2facfea9.png → 88708972-934e-4954-a502-87996823dc16.png} +0 -0
- /kotonebot/kaa/sprites/{479009fa-8b2b-47af-b13e-218a33454169.png → 8b4a0233-ace4-4551-931f-ff15e33c1c2c.png} +0 -0
- /kotonebot/kaa/sprites/{00a671bd-7568-44fe-9b33-93968e12091c.png → 8cd7630c-b343-42e1-8e12-bbddcc338e56.png} +0 -0
- /kotonebot/kaa/sprites/{260c0f15-6024-4324-b83f-0ac39d7545c5.png → 947645a0-bce3-4807-8459-9f8cd958f09e.png} +0 -0
- /kotonebot/kaa/sprites/{6e84d59d-040d-44c9-9242-9d49450290b6.png → 95eeb164-9d4e-4cf6-b205-a8341a9b6bb0.png} +0 -0
- /kotonebot/kaa/sprites/{795edf1b-4a7a-448d-855d-2b2e9f0052f7.png → 9b4c05d7-868d-49c8-95d4-c0a84d39c025.png} +0 -0
- /kotonebot/kaa/sprites/{a0efd483-dc41-4eee-9c1c-c4874d71d11e.png → 9c965862-ec78-4b66-b9d8-8e606b502e5d.png} +0 -0
- /kotonebot/kaa/sprites/{bbb8bae0-17ee-465c-b91b-1e13e719e150.png → 9ce1fe0c-4aae-4efe-83fa-bf431ab62ab8.png} +0 -0
- /kotonebot/kaa/sprites/{4dad344d-069c-44bd-ae10-33baca3544bb.png → 9db57c4d-d7d8-45a9-8a7c-b68e0bb113c8.png} +0 -0
- /kotonebot/kaa/sprites/{f5be4683-5767-4caf-b5b9-d68be444f39d.png → 9dfa0e51-2460-4c3c-8ea3-9fa6bc09c8aa.png} +0 -0
- /kotonebot/kaa/sprites/{2e802f45-46e9-4918-bd3e-e195fc829ab4.png → 9f617ed4-118a-4ba0-a8bd-fe0c6b21d586.png} +0 -0
- /kotonebot/kaa/sprites/{0c5cbe4a-f54a-4f02-8bbe-24cbd1748918.png → 9fa1e7cb-e8b8-43c7-96e7-33ea86c60932.png} +0 -0
- /kotonebot/kaa/sprites/{ffa5f117-778d-4d2a-90fb-b39acbe7ae4e.png → a0f13530-e3b0-459e-bcd5-18730e361485.png} +0 -0
- /kotonebot/kaa/sprites/{c7267425-2c38-45b2-b022-754e30829f96.png → a1189ca3-e642-4ed7-b935-40f63da46986.png} +0 -0
- /kotonebot/kaa/sprites/{a6dfdbfa-84f9-4207-8add-96c1eefbe88b.png → a3cd94c6-978a-4092-bc1f-da669a9472e7.png} +0 -0
- /kotonebot/kaa/sprites/{0c3144d0-26cf-47dc-b522-05f73a824f8b.png → a5b8f5ab-df6c-43db-adf7-5989220e48ca.png} +0 -0
- /kotonebot/kaa/sprites/{e6bffe23-f409-48e1-b0ec-b67e18d130b5.png → a642cdd7-4ae6-4b30-be1b-db518541452d.png} +0 -0
- /kotonebot/kaa/sprites/{ced15441-68b2-4d9c-99a2-4e8e4c4a131e.png → a66f022a-87e1-4607-b5f1-8dd4a110f48e.png} +0 -0
- /kotonebot/kaa/sprites/{b548f674-d84b-4b0f-b98f-1783500c5afd.png → a6dedf3b-32fb-4ac0-b035-8466b375710d.png} +0 -0
- /kotonebot/kaa/sprites/{6acca92d-1e23-4a8e-9c29-50c437459665.png → a970297a-c7f1-42cd-a0ce-42f20a2c5571.png} +0 -0
- /kotonebot/kaa/sprites/{9945a88e-b74a-4bd8-a19d-ddb24c9f54d6.png → a9df4cf5-c960-48eb-96c0-2beb97ef0964.png} +0 -0
- /kotonebot/kaa/sprites/{79448912-8204-4924-b05c-60a258d50341.png → aad5dc2d-8121-4f5e-8f4e-2a7b5cea8200.png} +0 -0
- /kotonebot/kaa/sprites/{461e1cae-891d-4080-945d-9cfb6caf2678.png → ac475d95-aa46-49f7-afda-e5bbbd3ef11b.png} +0 -0
- /kotonebot/kaa/sprites/{e860fe86-3a3c-4a33-b7e7-f63ebe735d17.png → ad1655b1-93c1-4cee-88ad-83a833dbbfc1.png} +0 -0
- /kotonebot/kaa/sprites/{cde8a738-047d-4a23-b223-6035f24cb80d.png → ae4a4dfd-01bc-4a8a-8807-241b0d158f2e.png} +0 -0
- /kotonebot/kaa/sprites/{2d04264f-89ee-4c89-8ee6-1a8a951fb125.png → b343a359-8311-499f-b96d-1a47f07916c3.png} +0 -0
- /kotonebot/kaa/sprites/{c18d85a8-a32c-4b49-8d08-5c876c23340c.png → b38b3a91-49f6-4699-a3f0-dd7de89b2a42.png} +0 -0
- /kotonebot/kaa/sprites/{2f7dd696-1f17-4bce-8c31-090720d7076b.png → b3e0fc29-1664-4301-a92d-7b3371d566dc.png} +0 -0
- /kotonebot/kaa/sprites/{c0fed709-68ab-457c-bbe9-814e557a75b6.png → b4569380-d0ba-48e2-b697-2fd0c3169819.png} +0 -0
- /kotonebot/kaa/sprites/{1c5215e4-0f52-4aa0-9631-72b25637e367.png → b62eeea5-48e7-47c3-bf00-355870190b40.png} +0 -0
- /kotonebot/kaa/sprites/{3f245cbd-bcf3-4d71-8f2e-5deb67e32161.png → b71b7873-29c1-4d7a-895b-9ca7f5c0313a.png} +0 -0
- /kotonebot/kaa/sprites/{8fca7893-14bb-4757-9a8d-474f4844bf7e.png → b89facd5-f362-4ca8-b6be-b66f53a4081a.png} +0 -0
- /kotonebot/kaa/sprites/{999e635c-7c0f-46c6-a5cb-b443c57c728a.png → b9350939-5437-49b6-9ef4-eee3b9bd49e2.png} +0 -0
- /kotonebot/kaa/sprites/{36fc34e4-6f06-4838-9c9c-547be7991d72.png → baaf7380-6da7-4234-8368-d90f711e9ccd.png} +0 -0
- /kotonebot/kaa/sprites/{6149054f-3daa-4d6a-a3aa-9eeb720c884c.png → bb681200-a6a1-49f3-a17b-0b8afbeaf69a.png} +0 -0
- /kotonebot/kaa/sprites/{a1d9ac58-de0e-4902-9186-60f94744a4bf.png → c409f292-8a99-4f34-b465-c42d6ed04cc7.png} +0 -0
- /kotonebot/kaa/sprites/{6d0a5233-c4e1-4f5e-9700-4ec3fc82b2fd.png → c4510fd6-237c-4578-bee4-9e5c73fc5830.png} +0 -0
- /kotonebot/kaa/sprites/{d626d60a-ec86-4cab-956e-77f296a2299b.png → c5e79a80-3ebd-4786-a8c9-ede13e110a92.png} +0 -0
- /kotonebot/kaa/sprites/{0f390754-f060-4af3-8e91-f60f1a9e7897.png → c8ec4f98-3025-4366-9221-6fb69fd930d7.png} +0 -0
- /kotonebot/kaa/sprites/{99a196e1-0988-4872-9867-64199ea07762.png → cb8414fe-5ee1-4ae2-914c-f19d6271d8a6.png} +0 -0
- /kotonebot/kaa/sprites/{03a4cc77-35ad-45f9-a72e-0514ed2a2bfe.png → cc55d4ca-6d9a-40fd-be6b-8776d9381979.png} +0 -0
- /kotonebot/kaa/sprites/{c8413601-dfa2-40e0-91f2-763b7d89a114.png → ccd3e45a-67f9-4528-9c1e-3b271681a4f3.png} +0 -0
- /kotonebot/kaa/sprites/{4f362851-9cb3-4e57-91a1-b71debd75c82.png → cf43d0d1-beb1-46e8-a0aa-be6d87d381ba.png} +0 -0
- /kotonebot/kaa/sprites/{b0cad7f2-80b5-4684-9f57-29eb0069fa05.png → d3bbcccd-6b1f-4468-9e1d-78d9e3c5b50d.png} +0 -0
- /kotonebot/kaa/sprites/{3e689d22-6785-465c-9081-1500e5e7a97a.png → d443e15b-0869-404b-89cc-04a27f8602e6.png} +0 -0
- /kotonebot/kaa/sprites/{45a77857-0942-4971-89c6-02142b9bf4b4.png → d4d253c9-4fbf-4a62-b6c1-95ed1f35f752.png} +0 -0
- /kotonebot/kaa/sprites/{07e157fd-ab89-46f4-80b9-ed414df5c453.png → db4308dd-294f-43e8-af8e-744125548b24.png} +0 -0
- /kotonebot/kaa/sprites/{ce1f7653-ad09-4674-9e92-78f1db47b3b4.png → dc8be9f6-a45d-4d7f-bda1-f0cd7d5171cd.png} +0 -0
- /kotonebot/kaa/sprites/{b774e32d-03e4-4aee-9d58-8d25bbdd833d.png → de629d6b-4d58-4065-8c21-435b6edcd205.png} +0 -0
- /kotonebot/kaa/sprites/{b387c86e-cf0e-4f54-8691-46d446b09d4e.png → dede75f5-1b61-44c4-9a4d-5751ac529337.png} +0 -0
- /kotonebot/kaa/sprites/{69a4dcf1-839a-4a55-8c68-69c43a666ee9.png → df643943-b856-4b6c-b898-bab41cea1cf2.png} +0 -0
- /kotonebot/kaa/sprites/{8ed37cbb-dc66-4c69-91e8-62ead7eb0175.png → e11102ca-c2b1-4a7a-8995-0823ad354dbb.png} +0 -0
- /kotonebot/kaa/sprites/{b2132dc4-40f7-446b-9042-d76c15366498.png → e82e7eac-f541-42c7-97fc-7e7f5684e862.png} +0 -0
- /kotonebot/kaa/sprites/{5f06d649-ec0f-4edb-9016-e23d7934e8ca.png → eb617da8-23bf-462a-98fc-d89e9a3063a2.png} +0 -0
- /kotonebot/kaa/sprites/{a9a1f783-55e3-4786-9063-5c5772324978.png → ef59c2b1-a915-4fe2-85b1-26dfb965a865.png} +0 -0
- /kotonebot/kaa/sprites/{d19877d6-85cd-46a1-b10b-cd593afdb34f.png → f0e5c302-65c2-4976-b3ca-771b4ddd1922.png} +0 -0
- /kotonebot/kaa/sprites/{98b4eac1-666e-4c90-9a16-f3b597a118bf.png → f3075a74-6297-418d-918a-896361e23703.png} +0 -0
- /kotonebot/kaa/sprites/{87567103-95f8-468b-8b99-c5d33b4efd45.png → f34ea72e-ce20-4d30-b332-a2be3cb656ce.png} +0 -0
- /kotonebot/kaa/sprites/{fece9bdd-05d8-452a-81b4-96f7ad4792ef.png → f3874241-8c5f-4508-9577-f2966d4557dc.png} +0 -0
- /kotonebot/kaa/sprites/{10e6f171-6fb3-4a03-bdaf-2964b52ec78d.png → f40db0e0-09a3-48d0-a222-6b23984357a7.png} +0 -0
- /kotonebot/kaa/sprites/{c38f7c08-06a4-40a9-a0ce-9b36b1f988b2.png → fe4bc939-7302-4b48-a6d3-e4e25b8fe112.png} +0 -0
- {ksaa-2025.5.16.0.dist-info → ksaa-2025.5.23.0.dist-info}/entry_points.txt +0 -0
- {ksaa-2025.5.16.0.dist-info → ksaa-2025.5.23.0.dist-info}/top_level.txt +0 -0
kotonebot/kaa/main/gr.py
CHANGED
|
@@ -2,8 +2,9 @@ import os
|
|
|
2
2
|
import zipfile
|
|
3
3
|
import logging
|
|
4
4
|
from functools import partial
|
|
5
|
+
from itertools import chain
|
|
5
6
|
from datetime import datetime, timedelta
|
|
6
|
-
from typing import List, Dict, Tuple, Literal, Generator
|
|
7
|
+
from typing import List, Dict, Tuple, Literal, Generator, Callable, Any, get_args, cast
|
|
7
8
|
|
|
8
9
|
import cv2
|
|
9
10
|
import gradio as gr
|
|
@@ -13,6 +14,7 @@ from kotonebot.kaa.db import IdolCard
|
|
|
13
14
|
from kotonebot.config.manager import load_config, save_config
|
|
14
15
|
from kotonebot.config.base_config import UserConfig, BackendConfig
|
|
15
16
|
from kotonebot.backend.context import task_registry, ContextStackVars
|
|
17
|
+
from kotonebot.client.host import Mumu12Host, LeidianHost
|
|
16
18
|
from kotonebot.kaa.common import (
|
|
17
19
|
BaseConfig, APShopItems, CapsuleToysConfig, ClubRewardConfig, PurchaseConfig, ActivityFundsConfig,
|
|
18
20
|
PresentsConfig, AssignmentConfig, ContestConfig, ProduceConfig,
|
|
@@ -21,6 +23,71 @@ from kotonebot.kaa.common import (
|
|
|
21
23
|
)
|
|
22
24
|
|
|
23
25
|
logger = logging.getLogger(__name__)
|
|
26
|
+
GradioInput = gr.Textbox | gr.Number | gr.Checkbox | gr.Dropdown | gr.Radio | gr.Slider | gr.Tabs | gr.Tab
|
|
27
|
+
ConfigKey = Literal[
|
|
28
|
+
# backend
|
|
29
|
+
'adb_ip', 'adb_port',
|
|
30
|
+
'screenshot_method', 'keep_screenshots',
|
|
31
|
+
'check_emulator', 'emulator_path',
|
|
32
|
+
'adb_emulator_name', 'emulator_args',
|
|
33
|
+
'_mumu_index', '_leidian_index',
|
|
34
|
+
|
|
35
|
+
# purchase
|
|
36
|
+
'purchase_enabled',
|
|
37
|
+
'money_enabled', 'ap_enabled',
|
|
38
|
+
'ap_items', 'money_items',
|
|
39
|
+
|
|
40
|
+
# assignment
|
|
41
|
+
'assignment_enabled',
|
|
42
|
+
'mini_live_reassign', 'mini_live_duration',
|
|
43
|
+
'online_live_reassign', 'online_live_duration',
|
|
44
|
+
'contest_enabled',
|
|
45
|
+
'select_which_contestant',
|
|
46
|
+
|
|
47
|
+
# produce
|
|
48
|
+
'produce_enabled', 'produce_mode',
|
|
49
|
+
'produce_count', 'produce_idols',
|
|
50
|
+
'memory_sets', 'auto_set_memory',
|
|
51
|
+
'auto_set_support', 'use_pt_boost',
|
|
52
|
+
'use_note_boost', 'follow_producer',
|
|
53
|
+
'self_study_lesson', 'prefer_lesson_ap',
|
|
54
|
+
'actions_order', 'recommend_card_detection_mode',
|
|
55
|
+
'use_ap_drink', 'skip_commu',
|
|
56
|
+
'mission_reward_enabled',
|
|
57
|
+
|
|
58
|
+
# club reward
|
|
59
|
+
'club_reward_enabled',
|
|
60
|
+
'selected_note',
|
|
61
|
+
|
|
62
|
+
# upgrade support card
|
|
63
|
+
'upgrade_support_card_enabled',
|
|
64
|
+
|
|
65
|
+
# capsule toys
|
|
66
|
+
'capsule_toys_enabled', 'friend_capsule_toys_count',
|
|
67
|
+
'sense_capsule_toys_count', 'logic_capsule_toys_count',
|
|
68
|
+
'anomaly_capsule_toys_count',
|
|
69
|
+
|
|
70
|
+
# start game
|
|
71
|
+
'start_game_enabled', 'start_through_kuyo',
|
|
72
|
+
'game_package_name', 'kuyo_package_name',
|
|
73
|
+
|
|
74
|
+
# end game
|
|
75
|
+
'exit_kaa', 'kill_game', 'kill_dmm',
|
|
76
|
+
'kill_emulator', 'shutdown', 'hibernate',
|
|
77
|
+
|
|
78
|
+
'activity_funds',
|
|
79
|
+
'presents',
|
|
80
|
+
'mission_reward',
|
|
81
|
+
'activity_funds_enabled',
|
|
82
|
+
'presents_enabled',
|
|
83
|
+
'trace_recommend_card_detection',
|
|
84
|
+
|
|
85
|
+
'_selected_backend_index'
|
|
86
|
+
|
|
87
|
+
]
|
|
88
|
+
CONFIG_KEY_VALUE: tuple[str] = get_args(ConfigKey)
|
|
89
|
+
ConfigSetFunction = Callable[[BaseConfig, Dict[ConfigKey, Any]], None]
|
|
90
|
+
ConfigBuilderReturnValue = Tuple[ConfigSetFunction, Dict[ConfigKey, GradioInput]]
|
|
24
91
|
|
|
25
92
|
def _save_bug_report(
|
|
26
93
|
version: str,
|
|
@@ -100,7 +167,7 @@ def _save_bug_report(
|
|
|
100
167
|
final_msg = f"### 报告导出成功:{url}\n\n"
|
|
101
168
|
expire_time = datetime.now() + timedelta(days=7)
|
|
102
169
|
if error:
|
|
103
|
-
final_msg +=
|
|
170
|
+
final_msg += "### 但发生了以下错误\n\n"
|
|
104
171
|
final_msg += '\n* '.join(error.strip().split('\n'))
|
|
105
172
|
final_msg += '\n'
|
|
106
173
|
final_msg += f"### 此链接将于 {expire_time.strftime('%Y-%m-%d %H:%M:%S')}(7 天后)过期\n\n"
|
|
@@ -229,174 +296,22 @@ class KotoneBotUI:
|
|
|
229
296
|
self.run_status.interrupt()
|
|
230
297
|
gr.Info("任务已停止")
|
|
231
298
|
return "执行任务", "任务已停止"
|
|
232
|
-
|
|
233
|
-
def
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
ap_items: List[str],
|
|
248
|
-
money_items: List[DailyMoneyShopItems],
|
|
249
|
-
activity_funds_enabled: bool,
|
|
250
|
-
presents_enabled: bool,
|
|
251
|
-
assignment_enabled: bool,
|
|
252
|
-
mini_live_reassign: bool,
|
|
253
|
-
mini_live_duration: Literal[4, 6, 12],
|
|
254
|
-
online_live_reassign: bool,
|
|
255
|
-
online_live_duration: Literal[4, 6, 12],
|
|
256
|
-
contest_enabled: bool,
|
|
257
|
-
select_which_contestant: Literal[1, 2, 3],
|
|
258
|
-
produce_enabled: bool,
|
|
259
|
-
produce_mode: Literal["regular"],
|
|
260
|
-
produce_count: int,
|
|
261
|
-
produce_idols: List[str],
|
|
262
|
-
memory_sets: List[str],
|
|
263
|
-
auto_set_memory: bool,
|
|
264
|
-
auto_set_support: bool,
|
|
265
|
-
use_pt_boost: bool,
|
|
266
|
-
use_note_boost: bool,
|
|
267
|
-
follow_producer: bool,
|
|
268
|
-
self_study_lesson: Literal['dance', 'visual', 'vocal'],
|
|
269
|
-
prefer_lesson_ap: bool,
|
|
270
|
-
actions_order: List[str],
|
|
271
|
-
recommend_card_detection_mode: str,
|
|
272
|
-
use_ap_drink: bool,
|
|
273
|
-
skip_commu: bool,
|
|
274
|
-
mission_reward_enabled: bool,
|
|
275
|
-
# club reward
|
|
276
|
-
club_reward_enabled: bool,
|
|
277
|
-
selected_note: DailyMoneyShopItems,
|
|
278
|
-
# upgrade support card
|
|
279
|
-
upgrade_support_card_enabled: bool,
|
|
280
|
-
# capsule toys
|
|
281
|
-
capsule_toys_enabled: bool,
|
|
282
|
-
friend_capsule_toys_count: int,
|
|
283
|
-
sense_capsule_toys_count: int,
|
|
284
|
-
logic_capsule_toys_count: int,
|
|
285
|
-
anomaly_capsule_toys_count: int,
|
|
286
|
-
# start game
|
|
287
|
-
start_game_enabled: bool,
|
|
288
|
-
start_through_kuyo: bool,
|
|
289
|
-
game_package_name: str,
|
|
290
|
-
kuyo_package_name: str,
|
|
291
|
-
# end game
|
|
292
|
-
exit_kaa: bool,
|
|
293
|
-
kill_game: bool,
|
|
294
|
-
kill_dmm: bool,
|
|
295
|
-
kill_emulator: bool,
|
|
296
|
-
shutdown: bool,
|
|
297
|
-
hibernate: bool,
|
|
298
|
-
) -> str:
|
|
299
|
-
ap_items_enum: List[Literal[0, 1, 2, 3]] = []
|
|
300
|
-
ap_items_map: Dict[str, APShopItems] = {
|
|
301
|
-
"支援强化点数提升": APShopItems.PRODUCE_PT_UP,
|
|
302
|
-
"笔记数提升": APShopItems.PRODUCE_NOTE_UP,
|
|
303
|
-
"重新挑战券": APShopItems.RECHALLENGE,
|
|
304
|
-
"回忆再生成券": APShopItems.REGENERATE_MEMORY
|
|
305
|
-
}
|
|
306
|
-
for item in ap_items:
|
|
307
|
-
if item in ap_items_map:
|
|
308
|
-
ap_items_enum.append(ap_items_map[item].value) # type: ignore
|
|
309
|
-
|
|
310
|
-
self.current_config.backend.adb_ip = adb_ip
|
|
311
|
-
self.current_config.backend.adb_port = adb_port
|
|
312
|
-
self.current_config.backend.adb_emulator_name = adb_emulator_name
|
|
313
|
-
self.current_config.backend.screenshot_impl = screenshot_method
|
|
314
|
-
self.current_config.keep_screenshots = keep_screenshots
|
|
315
|
-
self.current_config.backend.check_emulator = check_emulator
|
|
316
|
-
self.current_config.backend.emulator_path = emulator_path
|
|
317
|
-
self.current_config.backend.emulator_args = emulator_args
|
|
318
|
-
|
|
319
|
-
options = BaseConfig(
|
|
320
|
-
purchase=PurchaseConfig(
|
|
321
|
-
enabled=purchase_enabled,
|
|
322
|
-
money_enabled=money_enabled,
|
|
323
|
-
money_items=money_items,
|
|
324
|
-
ap_enabled=ap_enabled,
|
|
325
|
-
ap_items=ap_items_enum
|
|
326
|
-
),
|
|
327
|
-
activity_funds=ActivityFundsConfig(
|
|
328
|
-
enabled=activity_funds_enabled
|
|
329
|
-
),
|
|
330
|
-
presents=PresentsConfig(
|
|
331
|
-
enabled=presents_enabled
|
|
332
|
-
),
|
|
333
|
-
assignment=AssignmentConfig(
|
|
334
|
-
enabled=assignment_enabled,
|
|
335
|
-
mini_live_reassign_enabled=mini_live_reassign,
|
|
336
|
-
mini_live_duration=mini_live_duration,
|
|
337
|
-
online_live_reassign_enabled=online_live_reassign,
|
|
338
|
-
online_live_duration=online_live_duration
|
|
339
|
-
),
|
|
340
|
-
contest=ContestConfig(
|
|
341
|
-
enabled=contest_enabled,
|
|
342
|
-
select_which_contestant=select_which_contestant
|
|
343
|
-
),
|
|
344
|
-
produce=ProduceConfig(
|
|
345
|
-
enabled=produce_enabled,
|
|
346
|
-
mode=produce_mode,
|
|
347
|
-
produce_count=produce_count,
|
|
348
|
-
idols=produce_idols,
|
|
349
|
-
memory_sets=[int(i) for i in memory_sets],
|
|
350
|
-
auto_set_memory=auto_set_memory,
|
|
351
|
-
auto_set_support_card=auto_set_support,
|
|
352
|
-
use_pt_boost=use_pt_boost,
|
|
353
|
-
use_note_boost=use_note_boost,
|
|
354
|
-
follow_producer=follow_producer,
|
|
355
|
-
self_study_lesson=self_study_lesson,
|
|
356
|
-
prefer_lesson_ap=prefer_lesson_ap,
|
|
357
|
-
actions_order=[ProduceAction(action) for action in actions_order],
|
|
358
|
-
recommend_card_detection_mode=RecommendCardDetectionMode(recommend_card_detection_mode),
|
|
359
|
-
use_ap_drink=use_ap_drink,
|
|
360
|
-
skip_commu=skip_commu
|
|
361
|
-
),
|
|
362
|
-
mission_reward=MissionRewardConfig(
|
|
363
|
-
enabled=mission_reward_enabled
|
|
364
|
-
),
|
|
365
|
-
club_reward=ClubRewardConfig(
|
|
366
|
-
enabled=club_reward_enabled,
|
|
367
|
-
selected_note=selected_note
|
|
368
|
-
),
|
|
369
|
-
upgrade_support_card=UpgradeSupportCardConfig(
|
|
370
|
-
enabled=upgrade_support_card_enabled
|
|
371
|
-
),
|
|
372
|
-
capsule_toys=CapsuleToysConfig(
|
|
373
|
-
enabled=capsule_toys_enabled,
|
|
374
|
-
friend_capsule_toys_count=friend_capsule_toys_count,
|
|
375
|
-
sense_capsule_toys_count=sense_capsule_toys_count,
|
|
376
|
-
logic_capsule_toys_count=logic_capsule_toys_count,
|
|
377
|
-
anomaly_capsule_toys_count=anomaly_capsule_toys_count
|
|
378
|
-
),
|
|
379
|
-
start_game=StartGameConfig(
|
|
380
|
-
enabled=start_game_enabled,
|
|
381
|
-
start_through_kuyo=start_through_kuyo,
|
|
382
|
-
game_package_name=game_package_name,
|
|
383
|
-
kuyo_package_name=kuyo_package_name
|
|
384
|
-
),
|
|
385
|
-
end_game=EndGameConfig(
|
|
386
|
-
exit_kaa=exit_kaa,
|
|
387
|
-
kill_game=kill_game,
|
|
388
|
-
kill_dmm=kill_dmm,
|
|
389
|
-
kill_emulator=kill_emulator,
|
|
390
|
-
shutdown=shutdown,
|
|
391
|
-
hibernate=hibernate
|
|
392
|
-
),
|
|
393
|
-
trace=TraceConfig(
|
|
394
|
-
recommend_card_detection=trace_recommend_card_detection
|
|
395
|
-
)
|
|
396
|
-
)
|
|
397
|
-
|
|
299
|
+
|
|
300
|
+
def save_settings2(self, return_values: list[ConfigBuilderReturnValue], *args) -> str:
|
|
301
|
+
options = BaseConfig()
|
|
302
|
+
# return_values: (set_func, { 'key': component })
|
|
303
|
+
keys = list(chain.from_iterable([list(data.keys()) for _, data in return_values]))
|
|
304
|
+
# 根据 keys 与 *args 构建 data 字典
|
|
305
|
+
data = dict[ConfigKey, Any]()
|
|
306
|
+
assert len(keys) == len(args), "keys 与 args 长度不一致"
|
|
307
|
+
for key, value in zip(keys, args):
|
|
308
|
+
assert key in CONFIG_KEY_VALUE, f"未知的配置项:{key}"
|
|
309
|
+
key = cast(ConfigKey, key)
|
|
310
|
+
data[key] = value
|
|
311
|
+
# 设置结果
|
|
312
|
+
for (set_func, _) in return_values:
|
|
313
|
+
set_func(options, data)
|
|
398
314
|
self.current_config.options = options
|
|
399
|
-
|
|
400
315
|
try:
|
|
401
316
|
save_config(self.config, "config.json")
|
|
402
317
|
gr.Success("设置已保存,请重启程序!")
|
|
@@ -517,70 +432,173 @@ class KotoneBotUI:
|
|
|
517
432
|
outputs=[task_result]
|
|
518
433
|
)
|
|
519
434
|
|
|
520
|
-
def _create_emulator_settings(self) ->
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
with gr.
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
435
|
+
def _create_emulator_settings(self) -> ConfigBuilderReturnValue:
|
|
436
|
+
gr.Markdown("### 模拟器设置")
|
|
437
|
+
has_mumu12 = Mumu12Host.installed()
|
|
438
|
+
has_leidian = LeidianHost.installed()
|
|
439
|
+
current_tab = 0
|
|
440
|
+
|
|
441
|
+
def _update_emulator_tab_options(impl_value: str, selected_index: int):
|
|
442
|
+
nonlocal current_tab
|
|
443
|
+
current_tab = selected_index
|
|
444
|
+
|
|
445
|
+
if selected_index == 3: # DMM
|
|
446
|
+
choices = ['windows', 'remote_windows']
|
|
447
|
+
else: # Mumu, Leidian, Custom
|
|
448
|
+
choices = ['adb', 'adb_raw', 'uiautomator2']
|
|
449
|
+
|
|
450
|
+
if not impl_value in choices:
|
|
451
|
+
new_value = choices[0]
|
|
452
|
+
else:
|
|
453
|
+
new_value = impl_value
|
|
454
|
+
|
|
455
|
+
return gr.Dropdown(choices=choices, value=new_value)
|
|
456
|
+
|
|
457
|
+
with gr.Tabs(selected=self.current_config.backend.type) as emulator_tabs:
|
|
458
|
+
with gr.Tab("MuMu 12", interactive=has_mumu12, id="mumu12") as tab_mumu12:
|
|
459
|
+
gr.Markdown("已选中 MuMu 12 模拟器")
|
|
460
|
+
if has_mumu12:
|
|
461
|
+
instances = Mumu12Host.list()
|
|
462
|
+
mumu_instance = gr.Dropdown(
|
|
463
|
+
label="选择多开实例",
|
|
464
|
+
value=self.current_config.backend.instance_id,
|
|
465
|
+
choices=[(i.name, i.id) for i in instances],
|
|
466
|
+
interactive=True
|
|
467
|
+
)
|
|
468
|
+
else:
|
|
469
|
+
# 为了让 return 收集组件时不报错
|
|
470
|
+
mumu_instance = gr.Dropdown(visible=False)
|
|
471
|
+
|
|
472
|
+
with gr.Tab("雷电", interactive=has_leidian, id="leidian") as tab_leidian:
|
|
473
|
+
gr.Markdown("已选中雷电模拟器")
|
|
474
|
+
if has_leidian:
|
|
475
|
+
instances = LeidianHost.list()
|
|
476
|
+
leidian_instance = gr.Dropdown(
|
|
477
|
+
label="选择多开实例",
|
|
478
|
+
value=self.current_config.backend.instance_id,
|
|
479
|
+
choices=[(i.name, i.id) for i in instances],
|
|
480
|
+
interactive=True
|
|
481
|
+
)
|
|
482
|
+
else:
|
|
483
|
+
leidian_instance = gr.Dropdown(visible=False)
|
|
484
|
+
|
|
485
|
+
with gr.Tab("自定义", id="custom") as tab_custom:
|
|
486
|
+
gr.Markdown("已选中自定义模拟器")
|
|
487
|
+
adb_ip = gr.Textbox(
|
|
488
|
+
value=self.current_config.backend.adb_ip,
|
|
489
|
+
label="ADB IP 地址",
|
|
490
|
+
info=BackendConfig.model_fields['adb_ip'].description,
|
|
562
491
|
interactive=True
|
|
563
492
|
)
|
|
564
|
-
|
|
565
|
-
value=self.current_config.backend.
|
|
566
|
-
label="ADB
|
|
567
|
-
info=BackendConfig.model_fields['
|
|
493
|
+
adb_port = gr.Number(
|
|
494
|
+
value=self.current_config.backend.adb_port,
|
|
495
|
+
label="ADB 端口",
|
|
496
|
+
info=BackendConfig.model_fields['adb_port'].description,
|
|
497
|
+
minimum=1,
|
|
498
|
+
maximum=65535,
|
|
499
|
+
step=1,
|
|
568
500
|
interactive=True
|
|
569
501
|
)
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
info=BackendConfig.model_fields['
|
|
502
|
+
check_emulator = gr.Checkbox(
|
|
503
|
+
label="检查并启动模拟器",
|
|
504
|
+
value=self.current_config.backend.check_emulator,
|
|
505
|
+
info=BackendConfig.model_fields['check_emulator'].description,
|
|
574
506
|
interactive=True
|
|
575
507
|
)
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
508
|
+
with gr.Group(visible=self.current_config.backend.check_emulator) as check_emulator_group:
|
|
509
|
+
emulator_path = gr.Textbox(
|
|
510
|
+
value=self.current_config.backend.emulator_path,
|
|
511
|
+
label="模拟器 exe 文件路径",
|
|
512
|
+
info=BackendConfig.model_fields['emulator_path'].description,
|
|
513
|
+
interactive=True
|
|
514
|
+
)
|
|
515
|
+
adb_emulator_name = gr.Textbox(
|
|
516
|
+
value=self.current_config.backend.adb_emulator_name,
|
|
517
|
+
label="ADB 模拟器名称",
|
|
518
|
+
info=BackendConfig.model_fields['adb_emulator_name'].description,
|
|
519
|
+
interactive=True
|
|
520
|
+
)
|
|
521
|
+
emulator_args = gr.Textbox(
|
|
522
|
+
value=self.current_config.backend.emulator_args,
|
|
523
|
+
label="模拟器启动参数",
|
|
524
|
+
info=BackendConfig.model_fields['emulator_args'].description,
|
|
525
|
+
interactive=True
|
|
526
|
+
)
|
|
527
|
+
check_emulator.change(
|
|
528
|
+
fn=lambda x: gr.Group(visible=x),
|
|
529
|
+
inputs=[check_emulator],
|
|
530
|
+
outputs=[check_emulator_group]
|
|
531
|
+
)
|
|
532
|
+
|
|
533
|
+
with gr.Tab("DMM", id="dmm") as tab_dmm:
|
|
534
|
+
gr.Markdown("已选中 DMM")
|
|
582
535
|
|
|
583
|
-
|
|
536
|
+
type_in_config = self.current_config.backend.type
|
|
537
|
+
if type_in_config in ['dmm']:
|
|
538
|
+
choices = ['windows', 'remote_windows']
|
|
539
|
+
elif type_in_config in ['mumu12', 'leidian', 'custom']:
|
|
540
|
+
choices = ['adb', 'adb_raw', 'uiautomator2']
|
|
541
|
+
else:
|
|
542
|
+
raise ValueError(f'Unsupported backend type: {type_in_config}')
|
|
543
|
+
screenshot_impl = gr.Dropdown(
|
|
544
|
+
choices=choices,
|
|
545
|
+
value=self.current_config.backend.screenshot_impl,
|
|
546
|
+
label="截图方法",
|
|
547
|
+
info=BackendConfig.model_fields['screenshot_impl'].description,
|
|
548
|
+
interactive=True
|
|
549
|
+
)
|
|
550
|
+
|
|
551
|
+
keep_screenshots = gr.Checkbox(
|
|
552
|
+
label="保留截图数据",
|
|
553
|
+
value=self.current_config.keep_screenshots,
|
|
554
|
+
info=UserConfig.model_fields['keep_screenshots'].description,
|
|
555
|
+
interactive=True
|
|
556
|
+
)
|
|
557
|
+
|
|
558
|
+
tab_mumu12.select(fn=partial(_update_emulator_tab_options, selected_index=0), inputs=[screenshot_impl], outputs=[screenshot_impl])
|
|
559
|
+
tab_leidian.select(fn=partial(_update_emulator_tab_options, selected_index=1), inputs=[screenshot_impl], outputs=[screenshot_impl])
|
|
560
|
+
tab_custom.select(fn=partial(_update_emulator_tab_options, selected_index=2), inputs=[screenshot_impl], outputs=[screenshot_impl])
|
|
561
|
+
tab_dmm.select(fn=partial(_update_emulator_tab_options, selected_index=3), inputs=[screenshot_impl], outputs=[screenshot_impl])
|
|
562
|
+
|
|
563
|
+
def set_config(_: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
564
|
+
# current_tab is updated by _update_emulator_tab_options
|
|
565
|
+
if current_tab == 0: # Mumu
|
|
566
|
+
self.current_config.backend.type = 'mumu12'
|
|
567
|
+
self.current_config.backend.instance_id = data['_mumu_index']
|
|
568
|
+
elif current_tab == 1: # Leidian
|
|
569
|
+
self.current_config.backend.type = 'leidian'
|
|
570
|
+
self.current_config.backend.instance_id = data['_leidian_index']
|
|
571
|
+
elif current_tab == 2: # Custom
|
|
572
|
+
self.current_config.backend.type = 'custom'
|
|
573
|
+
self.current_config.backend.instance_id = None
|
|
574
|
+
self.current_config.backend.adb_ip = data['adb_ip']
|
|
575
|
+
self.current_config.backend.adb_port = data['adb_port']
|
|
576
|
+
self.current_config.backend.adb_emulator_name = data['adb_emulator_name']
|
|
577
|
+
self.current_config.backend.check_emulator = data['check_emulator']
|
|
578
|
+
self.current_config.backend.emulator_path = data['emulator_path']
|
|
579
|
+
self.current_config.backend.emulator_args = data['emulator_args']
|
|
580
|
+
elif current_tab == 3: # DMM
|
|
581
|
+
self.current_config.backend.type = 'dmm'
|
|
582
|
+
self.current_config.backend.instance_id = None # DMM doesn't use instance_id here
|
|
583
|
+
|
|
584
|
+
# Common settings for all backend types
|
|
585
|
+
self.current_config.backend.screenshot_impl = data['screenshot_method']
|
|
586
|
+
self.current_config.keep_screenshots = data['keep_screenshots'] # This is a UserConfig field
|
|
587
|
+
|
|
588
|
+
return set_config, {
|
|
589
|
+
'adb_ip': adb_ip,
|
|
590
|
+
'adb_port': adb_port,
|
|
591
|
+
'screenshot_method': screenshot_impl, # screenshot_impl is the component
|
|
592
|
+
'keep_screenshots': keep_screenshots,
|
|
593
|
+
'check_emulator': check_emulator,
|
|
594
|
+
'emulator_path': emulator_path,
|
|
595
|
+
'adb_emulator_name': adb_emulator_name,
|
|
596
|
+
'emulator_args': emulator_args,
|
|
597
|
+
'_mumu_index': mumu_instance,
|
|
598
|
+
'_leidian_index': leidian_instance
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
def _create_purchase_settings(self) -> ConfigBuilderReturnValue:
|
|
584
602
|
with gr.Column():
|
|
585
603
|
gr.Markdown("### 商店购买设置")
|
|
586
604
|
purchase_enabled = gr.Checkbox(
|
|
@@ -636,9 +654,33 @@ class KotoneBotUI:
|
|
|
636
654
|
inputs=[purchase_enabled],
|
|
637
655
|
outputs=[purchase_group]
|
|
638
656
|
)
|
|
639
|
-
|
|
657
|
+
|
|
658
|
+
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
659
|
+
config.purchase.enabled = data['purchase_enabled']
|
|
660
|
+
config.purchase.money_enabled = data['money_enabled']
|
|
661
|
+
config.purchase.money_items = [DailyMoneyShopItems(x) for x in data['money_items']]
|
|
662
|
+
config.purchase.ap_enabled = data['ap_enabled']
|
|
663
|
+
ap_items_enum: List[Literal[0, 1, 2, 3]] = []
|
|
664
|
+
ap_items_map: Dict[str, APShopItems] = {
|
|
665
|
+
"支援强化点数提升": APShopItems.PRODUCE_PT_UP,
|
|
666
|
+
"笔记数提升": APShopItems.PRODUCE_NOTE_UP,
|
|
667
|
+
"重新挑战券": APShopItems.RECHALLENGE,
|
|
668
|
+
"回忆再生成券": APShopItems.REGENERATE_MEMORY
|
|
669
|
+
}
|
|
670
|
+
for item in data['ap_items']:
|
|
671
|
+
if item in ap_items_map:
|
|
672
|
+
ap_items_enum.append(ap_items_map[item].value) # type: ignore
|
|
673
|
+
config.purchase.ap_items = ap_items_enum
|
|
674
|
+
|
|
675
|
+
return set_config, {
|
|
676
|
+
'purchase_enabled': purchase_enabled,
|
|
677
|
+
'money_enabled': money_enabled,
|
|
678
|
+
'ap_enabled': ap_enabled,
|
|
679
|
+
'ap_items': ap_items,
|
|
680
|
+
'money_items': money_items
|
|
681
|
+
}
|
|
640
682
|
|
|
641
|
-
def _create_work_settings(self) ->
|
|
683
|
+
def _create_work_settings(self) -> ConfigBuilderReturnValue:
|
|
642
684
|
with gr.Column():
|
|
643
685
|
gr.Markdown("### 工作设置")
|
|
644
686
|
assignment_enabled = gr.Checkbox(
|
|
@@ -680,9 +722,24 @@ class KotoneBotUI:
|
|
|
680
722
|
inputs=[assignment_enabled],
|
|
681
723
|
outputs=[work_group]
|
|
682
724
|
)
|
|
683
|
-
return assignment_enabled, mini_live_reassign, mini_live_duration, online_live_reassign, online_live_duration
|
|
725
|
+
# return assignment_enabled, mini_live_reassign, mini_live_duration, online_live_reassign, online_live_duration
|
|
726
|
+
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
727
|
+
config.assignment.enabled = data['assignment_enabled']
|
|
728
|
+
config.assignment.mini_live_reassign_enabled = data['mini_live_reassign']
|
|
729
|
+
config.assignment.mini_live_duration = data['mini_live_duration']
|
|
730
|
+
config.assignment.online_live_reassign_enabled = data['online_live_reassign']
|
|
731
|
+
config.assignment.online_live_duration = data['online_live_duration']
|
|
732
|
+
|
|
733
|
+
return set_config, {
|
|
734
|
+
'assignment_enabled': assignment_enabled,
|
|
735
|
+
'mini_live_reassign': mini_live_reassign,
|
|
736
|
+
'mini_live_duration': mini_live_duration,
|
|
737
|
+
'online_live_reassign': online_live_reassign,
|
|
738
|
+
'online_live_duration': online_live_duration
|
|
739
|
+
}
|
|
684
740
|
|
|
685
|
-
|
|
741
|
+
|
|
742
|
+
def _create_contest_settings(self) -> ConfigBuilderReturnValue:
|
|
686
743
|
with gr.Column():
|
|
687
744
|
gr.Markdown("### 竞赛设置")
|
|
688
745
|
contest_enabled = gr.Checkbox(
|
|
@@ -703,9 +760,17 @@ class KotoneBotUI:
|
|
|
703
760
|
inputs=[contest_enabled],
|
|
704
761
|
outputs=[contest_group]
|
|
705
762
|
)
|
|
706
|
-
|
|
763
|
+
|
|
764
|
+
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
765
|
+
config.contest.enabled = data['contest_enabled']
|
|
766
|
+
config.contest.select_which_contestant = data['select_which_contestant']
|
|
767
|
+
|
|
768
|
+
return set_config, {
|
|
769
|
+
'contest_enabled': contest_enabled,
|
|
770
|
+
'select_which_contestant': select_which_contestant
|
|
771
|
+
}
|
|
707
772
|
|
|
708
|
-
def _create_produce_settings(self):
|
|
773
|
+
def _create_produce_settings(self) -> ConfigBuilderReturnValue:
|
|
709
774
|
with gr.Column():
|
|
710
775
|
gr.Markdown("### 培育设置")
|
|
711
776
|
produce_enabled = gr.Checkbox(
|
|
@@ -849,9 +914,45 @@ class KotoneBotUI:
|
|
|
849
914
|
inputs=[auto_set_memory],
|
|
850
915
|
outputs=[memory_sets_group]
|
|
851
916
|
)
|
|
852
|
-
|
|
917
|
+
|
|
918
|
+
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
919
|
+
config.produce.enabled = data['produce_enabled']
|
|
920
|
+
config.produce.mode = data['produce_mode']
|
|
921
|
+
config.produce.produce_count = data['produce_count']
|
|
922
|
+
config.produce.idols = data['produce_idols']
|
|
923
|
+
config.produce.memory_sets = [int(i) for i in data['memory_sets']]
|
|
924
|
+
config.produce.auto_set_memory = data['auto_set_memory']
|
|
925
|
+
config.produce.auto_set_support_card = data['auto_set_support']
|
|
926
|
+
config.produce.use_pt_boost = data['use_pt_boost']
|
|
927
|
+
config.produce.use_note_boost = data['use_note_boost']
|
|
928
|
+
config.produce.follow_producer = data['follow_producer']
|
|
929
|
+
config.produce.self_study_lesson = data['self_study_lesson']
|
|
930
|
+
config.produce.prefer_lesson_ap = data['prefer_lesson_ap']
|
|
931
|
+
config.produce.actions_order = [ProduceAction(action) for action in data['actions_order']]
|
|
932
|
+
config.produce.recommend_card_detection_mode = RecommendCardDetectionMode(data['recommend_card_detection_mode'])
|
|
933
|
+
config.produce.use_ap_drink = data['use_ap_drink']
|
|
934
|
+
config.produce.skip_commu = data['skip_commu']
|
|
935
|
+
|
|
936
|
+
return set_config, {
|
|
937
|
+
'produce_enabled': produce_enabled,
|
|
938
|
+
'produce_mode': produce_mode,
|
|
939
|
+
'produce_count': produce_count,
|
|
940
|
+
'produce_idols': produce_idols,
|
|
941
|
+
'memory_sets': memory_sets,
|
|
942
|
+
'auto_set_memory': auto_set_memory,
|
|
943
|
+
'auto_set_support': auto_set_support,
|
|
944
|
+
'use_pt_boost': use_pt_boost,
|
|
945
|
+
'use_note_boost': use_note_boost,
|
|
946
|
+
'follow_producer': follow_producer,
|
|
947
|
+
'self_study_lesson': self_study_lesson,
|
|
948
|
+
'prefer_lesson_ap': prefer_lesson_ap,
|
|
949
|
+
'actions_order': actions_order,
|
|
950
|
+
'recommend_card_detection_mode': recommend_card_detection_mode,
|
|
951
|
+
'use_ap_drink': use_ap_drink,
|
|
952
|
+
'skip_commu': skip_commu
|
|
953
|
+
}
|
|
853
954
|
|
|
854
|
-
def _create_club_reward_settings(self) ->
|
|
955
|
+
def _create_club_reward_settings(self) -> ConfigBuilderReturnValue:
|
|
855
956
|
with gr.Column():
|
|
856
957
|
gr.Markdown("### 社团奖励设置")
|
|
857
958
|
club_reward_enabled = gr.Checkbox(
|
|
@@ -872,9 +973,17 @@ class KotoneBotUI:
|
|
|
872
973
|
inputs=[club_reward_enabled],
|
|
873
974
|
outputs=[club_reward_group]
|
|
874
975
|
)
|
|
875
|
-
|
|
976
|
+
|
|
977
|
+
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
978
|
+
config.club_reward.enabled = data['club_reward_enabled']
|
|
979
|
+
config.club_reward.selected_note = DailyMoneyShopItems(data['selected_note'])
|
|
980
|
+
|
|
981
|
+
return set_config, {
|
|
982
|
+
'club_reward_enabled': club_reward_enabled,
|
|
983
|
+
'selected_note': selected_note
|
|
984
|
+
}
|
|
876
985
|
|
|
877
|
-
def _create_capsule_toys_settings(self) ->
|
|
986
|
+
def _create_capsule_toys_settings(self) -> ConfigBuilderReturnValue:
|
|
878
987
|
with gr.Column():
|
|
879
988
|
gr.Markdown("### 扭蛋设置")
|
|
880
989
|
capsule_toys_enabled = gr.Checkbox(
|
|
@@ -918,10 +1027,24 @@ class KotoneBotUI:
|
|
|
918
1027
|
inputs=[capsule_toys_enabled],
|
|
919
1028
|
outputs=[capsule_toys_group]
|
|
920
1029
|
)
|
|
921
|
-
|
|
1030
|
+
|
|
1031
|
+
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
1032
|
+
config.capsule_toys.enabled = data['capsule_toys_enabled']
|
|
1033
|
+
config.capsule_toys.friend_capsule_toys_count = data['friend_capsule_toys_count']
|
|
1034
|
+
config.capsule_toys.sense_capsule_toys_count = data['sense_capsule_toys_count']
|
|
1035
|
+
config.capsule_toys.logic_capsule_toys_count = data['logic_capsule_toys_count']
|
|
1036
|
+
config.capsule_toys.anomaly_capsule_toys_count = data['anomaly_capsule_toys_count']
|
|
1037
|
+
|
|
1038
|
+
return set_config, {
|
|
1039
|
+
'capsule_toys_enabled': capsule_toys_enabled,
|
|
1040
|
+
'friend_capsule_toys_count': friend_capsule_toys_count,
|
|
1041
|
+
'sense_capsule_toys_count': sense_capsule_toys_count,
|
|
1042
|
+
'logic_capsule_toys_count': logic_capsule_toys_count,
|
|
1043
|
+
'anomaly_capsule_toys_count': anomaly_capsule_toys_count
|
|
1044
|
+
}
|
|
922
1045
|
|
|
923
1046
|
|
|
924
|
-
def _create_start_game_settings(self) ->
|
|
1047
|
+
def _create_start_game_settings(self) -> ConfigBuilderReturnValue:
|
|
925
1048
|
with gr.Column():
|
|
926
1049
|
gr.Markdown("### 启动游戏设置")
|
|
927
1050
|
start_game_enabled = gr.Checkbox(
|
|
@@ -950,9 +1073,22 @@ class KotoneBotUI:
|
|
|
950
1073
|
inputs=[start_game_enabled],
|
|
951
1074
|
outputs=[start_game_group]
|
|
952
1075
|
)
|
|
953
|
-
|
|
1076
|
+
|
|
1077
|
+
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
1078
|
+
config.start_game.enabled = data['start_game_enabled']
|
|
1079
|
+
config.start_game.start_through_kuyo = data['start_through_kuyo']
|
|
1080
|
+
config.start_game.game_package_name = data['game_package_name']
|
|
1081
|
+
config.start_game.kuyo_package_name = data['kuyo_package_name']
|
|
1082
|
+
|
|
1083
|
+
return set_config, {
|
|
1084
|
+
'start_game_enabled': start_game_enabled,
|
|
1085
|
+
'start_through_kuyo': start_through_kuyo,
|
|
1086
|
+
'game_package_name': game_package_name,
|
|
1087
|
+
'kuyo_package_name': kuyo_package_name
|
|
1088
|
+
}
|
|
1089
|
+
|
|
954
1090
|
|
|
955
|
-
def _create_end_game_settings(self) ->
|
|
1091
|
+
def _create_end_game_settings(self) -> ConfigBuilderReturnValue:
|
|
956
1092
|
with gr.Column():
|
|
957
1093
|
gr.Markdown("### 关闭游戏设置")
|
|
958
1094
|
gr.Markdown("在所有任务执行完毕后执行下面这些操作:\n(执行单个任务时不会触发)")
|
|
@@ -986,7 +1122,104 @@ class KotoneBotUI:
|
|
|
986
1122
|
value=self.current_config.options.end_game.hibernate,
|
|
987
1123
|
info=EndGameConfig.model_fields['hibernate'].description
|
|
988
1124
|
)
|
|
989
|
-
|
|
1125
|
+
|
|
1126
|
+
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
1127
|
+
config.end_game.exit_kaa = data['exit_kaa']
|
|
1128
|
+
config.end_game.kill_game = data['kill_game']
|
|
1129
|
+
config.end_game.kill_dmm = data['kill_dmm']
|
|
1130
|
+
config.end_game.kill_emulator = data['kill_emulator']
|
|
1131
|
+
config.end_game.shutdown = data['shutdown']
|
|
1132
|
+
config.end_game.hibernate = data['hibernate']
|
|
1133
|
+
|
|
1134
|
+
return set_config, {
|
|
1135
|
+
'exit_kaa': exit_kaa,
|
|
1136
|
+
'kill_game': kill_game,
|
|
1137
|
+
'kill_dmm': kill_dmm,
|
|
1138
|
+
'kill_emulator': kill_emulator,
|
|
1139
|
+
'shutdown': shutdown,
|
|
1140
|
+
'hibernate': hibernate
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
def _create_activity_funds_settings(self) -> ConfigBuilderReturnValue:
|
|
1144
|
+
with gr.Column():
|
|
1145
|
+
gr.Markdown("### 活动费设置")
|
|
1146
|
+
activity_funds = gr.Checkbox(
|
|
1147
|
+
label="启用收取活动费",
|
|
1148
|
+
value=self.current_config.options.activity_funds.enabled,
|
|
1149
|
+
info=ActivityFundsConfig.model_fields['enabled'].description
|
|
1150
|
+
)
|
|
1151
|
+
|
|
1152
|
+
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
1153
|
+
config.activity_funds.enabled = data['activity_funds']
|
|
1154
|
+
|
|
1155
|
+
return set_config, {
|
|
1156
|
+
'activity_funds': activity_funds
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
def _create_presents_settings(self) -> ConfigBuilderReturnValue:
|
|
1160
|
+
with gr.Column():
|
|
1161
|
+
gr.Markdown("### 礼物设置")
|
|
1162
|
+
presents = gr.Checkbox(
|
|
1163
|
+
label="启用收取礼物",
|
|
1164
|
+
value=self.current_config.options.presents.enabled,
|
|
1165
|
+
info=PresentsConfig.model_fields['enabled'].description
|
|
1166
|
+
)
|
|
1167
|
+
|
|
1168
|
+
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
1169
|
+
config.presents.enabled = data['presents']
|
|
1170
|
+
|
|
1171
|
+
return set_config, {
|
|
1172
|
+
'presents': presents
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
def _create_mission_reward_settings(self) -> ConfigBuilderReturnValue:
|
|
1176
|
+
with gr.Column():
|
|
1177
|
+
gr.Markdown("### 任务奖励设置")
|
|
1178
|
+
mission_reward = gr.Checkbox(
|
|
1179
|
+
label="启用领取任务奖励",
|
|
1180
|
+
value=self.current_config.options.mission_reward.enabled,
|
|
1181
|
+
info=MissionRewardConfig.model_fields['enabled'].description
|
|
1182
|
+
)
|
|
1183
|
+
|
|
1184
|
+
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
1185
|
+
config.mission_reward.enabled = data['mission_reward']
|
|
1186
|
+
|
|
1187
|
+
return set_config, {
|
|
1188
|
+
'mission_reward': mission_reward
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
def _create_upgrade_support_card_settings(self) -> ConfigBuilderReturnValue:
|
|
1192
|
+
with gr.Column():
|
|
1193
|
+
gr.Markdown("### 升级支援卡设置")
|
|
1194
|
+
upgrade_support_card_enabled = gr.Checkbox(
|
|
1195
|
+
label="启用升级支援卡",
|
|
1196
|
+
value=self.current_config.options.upgrade_support_card.enabled,
|
|
1197
|
+
info=UpgradeSupportCardConfig.model_fields['enabled'].description
|
|
1198
|
+
)
|
|
1199
|
+
|
|
1200
|
+
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
1201
|
+
config.upgrade_support_card.enabled = data['upgrade_support_card_enabled']
|
|
1202
|
+
|
|
1203
|
+
return set_config, {
|
|
1204
|
+
'upgrade_support_card_enabled': upgrade_support_card_enabled
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1207
|
+
def _create_trace_settings(self) -> ConfigBuilderReturnValue:
|
|
1208
|
+
with gr.Column():
|
|
1209
|
+
gr.Markdown("### 跟踪设置")
|
|
1210
|
+
trace_recommend_card_detection = gr.Checkbox(
|
|
1211
|
+
label="跟踪推荐卡检测",
|
|
1212
|
+
value=self.current_config.options.trace.recommend_card_detection,
|
|
1213
|
+
info=TraceConfig.model_fields['recommend_card_detection'].description,
|
|
1214
|
+
interactive=True
|
|
1215
|
+
)
|
|
1216
|
+
|
|
1217
|
+
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
1218
|
+
config.trace.recommend_card_detection = data['trace_recommend_card_detection']
|
|
1219
|
+
|
|
1220
|
+
return set_config, {
|
|
1221
|
+
'trace_recommend_card_detection': trace_recommend_card_detection
|
|
1222
|
+
}
|
|
990
1223
|
|
|
991
1224
|
def _create_settings_tab(self) -> None:
|
|
992
1225
|
with gr.Tab("设置"):
|
|
@@ -999,22 +1232,10 @@ class KotoneBotUI:
|
|
|
999
1232
|
purchase_settings = self._create_purchase_settings()
|
|
1000
1233
|
|
|
1001
1234
|
# 活动费设置
|
|
1002
|
-
|
|
1003
|
-
gr.Markdown("### 活动费设置")
|
|
1004
|
-
activity_funds = gr.Checkbox(
|
|
1005
|
-
label="启用收取活动费",
|
|
1006
|
-
value=self.current_config.options.activity_funds.enabled,
|
|
1007
|
-
info=ActivityFundsConfig.model_fields['enabled'].description
|
|
1008
|
-
)
|
|
1235
|
+
activity_funds_settings = self._create_activity_funds_settings()
|
|
1009
1236
|
|
|
1010
1237
|
# 礼物设置
|
|
1011
|
-
|
|
1012
|
-
gr.Markdown("### 礼物设置")
|
|
1013
|
-
presents = gr.Checkbox(
|
|
1014
|
-
label="启用收取礼物",
|
|
1015
|
-
value=self.current_config.options.presents.enabled,
|
|
1016
|
-
info=PresentsConfig.model_fields['enabled'].description
|
|
1017
|
-
)
|
|
1238
|
+
presents_settings = self._create_presents_settings()
|
|
1018
1239
|
|
|
1019
1240
|
# 工作设置
|
|
1020
1241
|
work_settings = self._create_work_settings()
|
|
@@ -1026,38 +1247,16 @@ class KotoneBotUI:
|
|
|
1026
1247
|
produce_settings = self._create_produce_settings()
|
|
1027
1248
|
|
|
1028
1249
|
# 任务奖励设置
|
|
1029
|
-
|
|
1030
|
-
gr.Markdown("### 任务奖励设置")
|
|
1031
|
-
mission_reward = gr.Checkbox(
|
|
1032
|
-
label="启用领取任务奖励",
|
|
1033
|
-
value=self.current_config.options.mission_reward.enabled,
|
|
1034
|
-
info=MissionRewardConfig.model_fields['enabled'].description
|
|
1035
|
-
)
|
|
1250
|
+
mission_reward_settings = self._create_mission_reward_settings()
|
|
1036
1251
|
|
|
1037
1252
|
# 社团奖励设置
|
|
1038
1253
|
club_reward_settings = self._create_club_reward_settings()
|
|
1039
1254
|
|
|
1040
1255
|
# 升级支援卡设置
|
|
1041
|
-
with gr.Column():
|
|
1042
|
-
gr.Markdown("### 升级支援卡设置")
|
|
1043
|
-
upgrade_support_card_enabled = gr.Checkbox(
|
|
1044
|
-
label="启用升级支援卡",
|
|
1045
|
-
value=self.current_config.options.upgrade_support_card.enabled,
|
|
1046
|
-
info=UpgradeSupportCardConfig.model_fields['enabled'].description
|
|
1047
|
-
)
|
|
1048
|
-
|
|
1049
1256
|
capsule_toys_settings = self._create_capsule_toys_settings()
|
|
1050
1257
|
|
|
1051
1258
|
# 跟踪设置
|
|
1052
|
-
|
|
1053
|
-
gr.Markdown("### 跟踪设置")
|
|
1054
|
-
gr.Markdown("跟踪功能会记录指定模块的运行情况,并保存截图。")
|
|
1055
|
-
trace_recommend_card_detection = gr.Checkbox(
|
|
1056
|
-
label="跟踪推荐卡检测",
|
|
1057
|
-
value=self.current_config.options.trace.recommend_card_detection,
|
|
1058
|
-
info=TraceConfig.model_fields['recommend_card_detection'].description,
|
|
1059
|
-
interactive=True
|
|
1060
|
-
)
|
|
1259
|
+
trace_settings = self._create_trace_settings()
|
|
1061
1260
|
|
|
1062
1261
|
# 启动游戏设置
|
|
1063
1262
|
start_game_settings = self._create_start_game_settings()
|
|
@@ -1069,26 +1268,26 @@ class KotoneBotUI:
|
|
|
1069
1268
|
result = gr.Markdown()
|
|
1070
1269
|
|
|
1071
1270
|
# 收集所有设置组件
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
]
|
|
1088
|
-
|
|
1271
|
+
all_return_values = [
|
|
1272
|
+
emulator_settings,
|
|
1273
|
+
purchase_settings,
|
|
1274
|
+
activity_funds_settings,
|
|
1275
|
+
presents_settings,
|
|
1276
|
+
work_settings,
|
|
1277
|
+
contest_settings,
|
|
1278
|
+
produce_settings,
|
|
1279
|
+
mission_reward_settings,
|
|
1280
|
+
club_reward_settings,
|
|
1281
|
+
capsule_toys_settings,
|
|
1282
|
+
start_game_settings,
|
|
1283
|
+
end_game_settings,
|
|
1284
|
+
trace_settings
|
|
1285
|
+
] # list of (set_func, { 'key': component, ... })
|
|
1286
|
+
all_components = [list(ret[1].values()) for ret in all_return_values] # [[c1, c2], [c3], ...]
|
|
1287
|
+
all_components = list(chain(*all_components)) # [c1, c2, c3, ...]
|
|
1089
1288
|
save_btn.click(
|
|
1090
|
-
fn=self.
|
|
1091
|
-
inputs=
|
|
1289
|
+
fn=partial(self.save_settings2, all_return_values),
|
|
1290
|
+
inputs=all_components,
|
|
1092
1291
|
outputs=result
|
|
1093
1292
|
)
|
|
1094
1293
|
|