ksaa 2025.7.3.0__py3-none-any.whl → 2025.7.7.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/backend/bot.py +13 -2
- kotonebot/backend/context/context.py +23 -3
- kotonebot/client/device.py +0 -35
- kotonebot/config/base_config.py +2 -0
- kotonebot/kaa/common.py +29 -21
- kotonebot/kaa/game_ui/toolbar.py +3 -2
- kotonebot/kaa/main/gr.py +37 -8
- kotonebot/kaa/main/kaa.py +21 -0
- kotonebot/kaa/metadata.py +27 -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-hmsz-1-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-1-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-3-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hmsz-3-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-1-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-hume-1-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-1-001_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-1-001_1.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-007_0.png +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-007_1.png +0 -0
- kotonebot/kaa/sprites/0bf5e34e-afc6-4447-bbac-67026ce2ad26.png +0 -0
- kotonebot/kaa/sprites/0d9ac648-eefa-4869-ac99-1b0c83649681.png +0 -0
- kotonebot/kaa/sprites/185f7838-92a7-460b-9340-f60858948ce9.png +0 -0
- kotonebot/kaa/sprites/213016c2-c3a2-43d8-86a3-ab4d27666ced.png +0 -0
- kotonebot/kaa/sprites/24dc7158-036c-4a66-9280-e934f470be53.png +0 -0
- kotonebot/kaa/sprites/3942ae40-7f22-412c-aebe-4b064f68db9b.png +0 -0
- kotonebot/kaa/sprites/5031808b-5525-4118-92b4-317ec8bda985.png +0 -0
- kotonebot/kaa/sprites/5d36b880-7b3f-49b1-a018-7de59867d376.png +0 -0
- kotonebot/kaa/sprites/81c97cd3-df53-44d3-bf3d-1eb4dc67b62a.png +0 -0
- kotonebot/kaa/sprites/8f8b7b46-53bb-42ab-907a-4ea87eb09ab4.png +0 -0
- kotonebot/kaa/sprites/921eefeb-730e-46fc-9924-d338fb286592.png +0 -0
- kotonebot/kaa/sprites/ae9fe233-9acc-4e96-ba8e-1fb1d9bc2ea5.png +0 -0
- kotonebot/kaa/sprites/cb3d0ca7-8d14-408a-a2f5-2e25f7b86d6c.png +0 -0
- kotonebot/kaa/sprites/cc60b509-2ed5-493d-bb9f-333c6d2a6006.png +0 -0
- kotonebot/kaa/tasks/R.py +147 -153
- kotonebot/kaa/tasks/daily/acquire_activity_funds.py +12 -10
- kotonebot/kaa/tasks/daily/assignment.py +9 -11
- kotonebot/kaa/tasks/daily/purchase.py +52 -28
- kotonebot/kaa/tasks/produce/produce.py +12 -5
- {ksaa-2025.7.3.0.dist-info → ksaa-2025.7.7.0.dist-info}/METADATA +1 -1
- {ksaa-2025.7.3.0.dist-info → ksaa-2025.7.7.0.dist-info}/RECORD +173 -164
- kotonebot/kaa/sprites/047454d6-9cbb-432d-b670-bde2d5f5fc9a.png +0 -0
- kotonebot/kaa/sprites/135ee57a-d30d-4ba8-83f0-9f1681a49ff7.png +0 -0
- kotonebot/kaa/sprites/17608ef8-fe7c-4fc7-b811-a6c05e838881.png +0 -0
- kotonebot/kaa/sprites/278b7d9c-707e-4392-9677-74574b5cdf42.png +0 -0
- kotonebot/kaa/sprites/2bc00520-0afe-40e5-8743-d33fc6b2945a.png +0 -0
- kotonebot/kaa/sprites/404c6271-1af4-4f63-be02-e82b318eb072.png +0 -0
- kotonebot/kaa/sprites/6720b6e8-ae80-4cc0-a885-518efe12b707.png +0 -0
- kotonebot/kaa/sprites/685fb958-ec13-4826-8e78-3575ff42df27.png +0 -0
- kotonebot/kaa/sprites/699df701-37a2-4e17-afae-5b49ab826926.png +0 -0
- kotonebot/kaa/sprites/74ff07b3-d91c-4579-80cd-379ed7020622.png +0 -0
- kotonebot/kaa/sprites/868b97a9-492e-4712-b47f-82b97495b019.png +0 -0
- kotonebot/kaa/sprites/a7f5abf1-982f-4a55-8d41-3ad6f56798e0.png +0 -0
- kotonebot/kaa/sprites/afa06fdc-a345-4384-b25d-b16540830256.png +0 -0
- kotonebot/kaa/sprites/d15959bf-d07b-4f07-948a-c0aeaf17756a.png +0 -0
- kotonebot/kaa/sprites/ea0440b1-a7a5-4db0-828a-f907b0531cd5.png +0 -0
- /kotonebot/kaa/sprites/{7d7ccd61-8d92-49b4-aa7e-b1e73906371e.png → 0089161a-0dac-41da-97af-b9200339a383.png} +0 -0
- /kotonebot/kaa/sprites/{4466c3fe-a5ad-4960-a137-0d735441b12e.png → 025f1786-cd28-4a08-ad81-178d267dbb1a.png} +0 -0
- /kotonebot/kaa/sprites/{85347bb8-c28d-4a40-bd55-386c530727c2.png → 05d933de-6274-4d46-a81b-860de1981ebc.png} +0 -0
- /kotonebot/kaa/sprites/{76aca556-0042-4f84-a29a-30e6a631aa72.png → 06e7d3f6-1ab8-4714-8ab5-8af71dcbfa78.png} +0 -0
- /kotonebot/kaa/sprites/{7aa7c3dc-02e8-4d70-a026-d1afb34f37f9.png → 08f93e03-18c9-42e3-9a2f-7d7954f585b0.png} +0 -0
- /kotonebot/kaa/sprites/{02de663b-a039-4530-b10b-fd5aea9f600e.png → 0913f34e-1790-4afb-af31-9a5e94d54b05.png} +0 -0
- /kotonebot/kaa/sprites/{88ed3d25-070a-411d-b4fb-8a9df068b091.png → 0a3c0a4e-a979-401c-9bf3-a389e8a74e7b.png} +0 -0
- /kotonebot/kaa/sprites/{081ca89e-0f95-45e5-a855-5b7e49295af5.png → 0eb4e53c-f0af-4c86-870c-b1db087d53db.png} +0 -0
- /kotonebot/kaa/sprites/{abd7bfbf-5f08-452a-b216-22fb0af4e955.png → 10713c56-e462-4543-8a51-02f220ed6943.png} +0 -0
- /kotonebot/kaa/sprites/{7036c80b-28fd-4a54-a8f9-06a23d89e861.png → 119f04e2-3871-46a8-9d5c-808c641f7aae.png} +0 -0
- /kotonebot/kaa/sprites/{1fc998a7-cfa2-4485-9742-1ae87306a9fc.png → 126f5161-3567-4c76-8e91-371392e39a9c.png} +0 -0
- /kotonebot/kaa/sprites/{bba69e83-b9f4-4a24-a95b-190c985c5b22.png → 1762b8dc-abb8-402e-88b9-22111b054d27.png} +0 -0
- /kotonebot/kaa/sprites/{a5bd802e-d10c-4e95-9b62-1ffd92aca4ab.png → 177ee196-1013-487e-9944-64c4a9b803ef.png} +0 -0
- /kotonebot/kaa/sprites/{6af19ba1-ca74-473b-8788-61132e5fc084.png → 18369504-36b1-4b10-93e6-878c2cae6c8f.png} +0 -0
- /kotonebot/kaa/sprites/{1140cce1-90e4-44cd-9acc-c2491841fbd4.png → 1cd922b1-cd9c-4b60-b7e7-014c59217cb0.png} +0 -0
- /kotonebot/kaa/sprites/{612d508d-e77c-492e-854d-30141733bd27.png → 1cede0b7-5042-481c-b507-957dd98ec17a.png} +0 -0
- /kotonebot/kaa/sprites/{0e0686c7-9fe8-4f82-9d05-7922e55fc1a9.png → 1d714b45-6b20-40ba-8e0b-e7c106f0c8f3.png} +0 -0
- /kotonebot/kaa/sprites/{ada79928-ea1a-4537-89e7-a02877dc6e7d.png → 1e398be7-49ac-4eb6-b828-b935f042037a.png} +0 -0
- /kotonebot/kaa/sprites/{81bf65f2-9cc3-4613-9611-e7b5ec14c31c.png → 20748b0c-889f-4706-857b-48fc921a88e3.png} +0 -0
- /kotonebot/kaa/sprites/{c5447438-3b41-465e-b438-157f5e61c764.png → 2146a037-c3ad-4c33-834c-ddd7f3b7876c.png} +0 -0
- /kotonebot/kaa/sprites/{e3c1f79a-0077-43db-bd00-ba04d7ca8d3b.png → 2154ebd3-9c89-4355-b4f4-a5e18ecf728d.png} +0 -0
- /kotonebot/kaa/sprites/{276522a3-d8f0-4b0f-8ee5-dce3f2cb87a5.png → 21fe29c2-f49b-473f-8ac3-896b4d3c72f5.png} +0 -0
- /kotonebot/kaa/sprites/{ecdf7c70-d50e-41f4-a2ee-c4f6dd5a2617.png → 23464a7b-dc7a-439c-86b7-04a5dd506412.png} +0 -0
- /kotonebot/kaa/sprites/{4cca8c07-b33f-4f57-8c2b-3fff8cb4424a.png → 2712893d-0219-43e1-8de7-c2761456719e.png} +0 -0
- /kotonebot/kaa/sprites/{25598023-8999-4737-9f3c-9da71bb88748.png → 2d0ed04f-777a-4a69-9a58-0be791260dca.png} +0 -0
- /kotonebot/kaa/sprites/{e671d7bd-cf40-425f-b941-3e1adf4624e8.png → 2d4001e6-137e-40b2-94b0-ba3ae9e397e4.png} +0 -0
- /kotonebot/kaa/sprites/{5d8bbe9f-4732-495a-8d27-80cfd2ea12f5.png → 2ed453f3-9c31-4c96-95dd-1a6aa68302f7.png} +0 -0
- /kotonebot/kaa/sprites/{84af97ac-7e73-4ae8-88a6-9b3a18c81fbe.png → 2f4f3d81-2a8c-49d3-84a8-4d1205237ed4.png} +0 -0
- /kotonebot/kaa/sprites/{25151748-2eb2-4f08-94f1-f1be2fbea3da.png → 2ffd9c12-0520-4f9c-92b1-bfdef0681583.png} +0 -0
- /kotonebot/kaa/sprites/{a241cff0-d803-4c8f-bcd0-22bda2adc8a7.png → 308818b7-a252-45a6-868d-553c078b3752.png} +0 -0
- /kotonebot/kaa/sprites/{ab4cd19c-ad2b-4ed7-baeb-eef6a12939b2.png → 3091351b-ab63-4688-8082-32545052d7a8.png} +0 -0
- /kotonebot/kaa/sprites/{6be05914-aa45-4e55-a0bb-7ec16e76d7b1.png → 30ff50f2-7ab2-4a1d-88db-fd6deaba328e.png} +0 -0
- /kotonebot/kaa/sprites/{807904aa-30fd-4a9b-8acb-ca4b235281bc.png → 31dd40b0-1c07-4d6c-aabe-fd3e4895f4df.png} +0 -0
- /kotonebot/kaa/sprites/{7344f9d8-fccb-44e3-ab43-a180cfce2217.png → 3ddd0976-7c8b-4c67-bac7-a0cc1af3bfad.png} +0 -0
- /kotonebot/kaa/sprites/{46debd92-df4c-49d6-a3f6-c83a4c72be70.png → 3de5ce1b-f72b-450a-a1de-5a841fbd507a.png} +0 -0
- /kotonebot/kaa/sprites/{9bf5d8a8-30c1-4ce7-9888-bcada63d48e6.png → 3e9bdd08-3a74-40b3-8320-05ed4e8fe5d7.png} +0 -0
- /kotonebot/kaa/sprites/{99ae067f-72f2-4d13-a2de-f78ce13ec5a3.png → 4112f697-094b-4046-bfac-409f156784b0.png} +0 -0
- /kotonebot/kaa/sprites/{bc10fc41-960e-4151-aad2-325367b20895.png → 466524da-0d9e-424f-82eb-d6e6d3145bd3.png} +0 -0
- /kotonebot/kaa/sprites/{124fb25f-47ac-468d-97af-f90c9604f1c5.png → 4670fd78-3748-4df3-968b-25c8246da92b.png} +0 -0
- /kotonebot/kaa/sprites/{2b9fb35b-4a3b-440d-bcac-1eb1fdfe0e21.png → 467fe027-96ba-48b1-963b-75a5c41277c4.png} +0 -0
- /kotonebot/kaa/sprites/{9fb0b19e-ae0c-4c9e-8ec8-b126113b6091.png → 489feedd-f44e-4714-ad24-b53630dfcf27.png} +0 -0
- /kotonebot/kaa/sprites/{81a6e258-670c-4646-90ef-a76846cf5d37.png → 4abd8e80-83ef-4d1a-b143-e6ad0ac189ab.png} +0 -0
- /kotonebot/kaa/sprites/{f699ed29-e7aa-4c53-8320-3df785078ec3.png → 4d3e267c-552c-4a65-840a-dc72a61c8db1.png} +0 -0
- /kotonebot/kaa/sprites/{3bf0a104-739e-4bef-9304-4aa77e5e18ea.png → 4e040068-e2ae-4348-80a2-f113c2426d46.png} +0 -0
- /kotonebot/kaa/sprites/{689aa894-304a-48d2-8b6e-794dc967b1f6.png → 4eb9a3a1-da46-493b-a17d-5eb9ef53524c.png} +0 -0
- /kotonebot/kaa/sprites/{94b8429e-64d9-49da-945c-d2d3dcccb587.png → 51eac702-ca23-4aba-b75a-cdb03a93a117.png} +0 -0
- /kotonebot/kaa/sprites/{af4b7a1d-4cb2-432c-8dbb-c333950c58c2.png → 5200fbda-653d-4b6f-84d8-15793cc53684.png} +0 -0
- /kotonebot/kaa/sprites/{95e591bb-f0e6-457e-83e3-0909cb5c8877.png → 5367d7ad-5a27-42e4-a7d9-5bf27102f502.png} +0 -0
- /kotonebot/kaa/sprites/{0b452661-3720-4fa3-9e52-6fdc69517396.png → 54d71b39-a3f2-4f20-a294-b6b5ef9c56f3.png} +0 -0
- /kotonebot/kaa/sprites/{28f44641-894d-4047-bc56-b932ac5a32a0.png → 54f5e4d6-44f9-4249-bf80-aaaacf0a8d52.png} +0 -0
- /kotonebot/kaa/sprites/{540a0d73-7158-4872-808f-abcb11ba1aef.png → 5587551f-011c-4f94-86e8-7e81d08c4be2.png} +0 -0
- /kotonebot/kaa/sprites/{02048c24-3002-4122-b24b-15a2c2fb502f.png → 59997849-5a5a-4589-a4ff-e91a789fc68d.png} +0 -0
- /kotonebot/kaa/sprites/{0ad61c60-5458-400d-9788-437edb32608a.png → 5cff1e6f-81ea-4d4a-88ba-209cf3bbb165.png} +0 -0
- /kotonebot/kaa/sprites/{26b9efc1-51be-4784-bf78-2b929abac650.png → 5d5db2d4-2648-40fe-bd17-05aea9afbc7d.png} +0 -0
- /kotonebot/kaa/sprites/{3a4e2e77-c49b-4f69-bfd1-19fbe4f5c9a5.png → 5efa51e6-5cb7-4843-9397-8d71c6175fcf.png} +0 -0
- /kotonebot/kaa/sprites/{2a2770d2-7fd8-4bb0-89a7-c507046fc892.png → 6490c5b2-2ed8-44d6-93b8-72d88434b49e.png} +0 -0
- /kotonebot/kaa/sprites/{7d4d40cf-a6db-41ef-90fd-2fb0a6f5087d.png → 688d653e-7ee7-4d41-ac79-b4efd6c3cadd.png} +0 -0
- /kotonebot/kaa/sprites/{a6d63930-bb09-443c-95ae-47ad6a9f9cc4.png → 6a45398a-4240-4fb7-8926-fa1254125bbf.png} +0 -0
- /kotonebot/kaa/sprites/{a2ab29ef-ddc7-4885-9f88-850858b0c995.png → 6d4337f4-e30c-44eb-bab9-220a46c0c96f.png} +0 -0
- /kotonebot/kaa/sprites/{01ce8957-465d-4278-b297-f58b36c73285.png → 6df0db09-9159-43b5-a6b9-43a2dfdafdab.png} +0 -0
- /kotonebot/kaa/sprites/{0a586241-e005-45a6-b12f-eed8089d8fd8.png → 6f06519d-4f33-4418-b4cb-35a7356cc121.png} +0 -0
- /kotonebot/kaa/sprites/{6fc5543e-9d09-4f06-8331-64ee62bd73c3.png → 6f638005-aa18-4804-a5fe-269de4d1ad9e.png} +0 -0
- /kotonebot/kaa/sprites/{56a7aed8-6367-40dd-a6a1-fc8a840abd9b.png → 6faf9942-994d-418a-ae42-25c5fcffa79e.png} +0 -0
- /kotonebot/kaa/sprites/{28ea2cc9-e9f2-4573-968a-0c88562c696a.png → 7315c6b9-6fda-4790-8e9a-c8c4220834e1.png} +0 -0
- /kotonebot/kaa/sprites/{71fe9437-3d7a-4321-9e5c-d6b81d954002.png → 76f43a30-b76d-4648-91b6-49f2786e668d.png} +0 -0
- /kotonebot/kaa/sprites/{3037118b-4a82-4cfc-ad95-db8a03f779d5.png → 774ca489-09c2-414e-b27b-f32d3bf6894d.png} +0 -0
- /kotonebot/kaa/sprites/{33aaec9e-dccc-441a-b91a-4784f1eb4498.png → 78c0f6b4-c09d-4b44-9b5e-35e1e40dd748.png} +0 -0
- /kotonebot/kaa/sprites/{f1758956-6b88-49f7-9ecf-44db49d1e6fe.png → 7c40ea85-87f6-4531-a25a-896dd70b49d1.png} +0 -0
- /kotonebot/kaa/sprites/{0db398fd-3551-4a15-b734-ca5a7b54150f.png → 7dd1c478-719f-4432-891f-9543064fd1fc.png} +0 -0
- /kotonebot/kaa/sprites/{e2d3a8c0-3998-4643-b084-c21b2304843c.png → 80c45554-0758-47eb-b9d7-d8c10f462ae5.png} +0 -0
- /kotonebot/kaa/sprites/{fccea764-f5db-45c6-ace1-140844e0d0f0.png → 8308964d-96d1-4b7e-b0fa-b20163311153.png} +0 -0
- /kotonebot/kaa/sprites/{f92f9af7-77ef-4814-a64b-ce8f340a9cf9.png → 835a1f3e-5a06-4490-bc2e-c6d3d8edc1fd.png} +0 -0
- /kotonebot/kaa/sprites/{540547f7-5633-440c-b7ad-b54529436479.png → 84c0f8bf-c670-47d4-8d5c-06de599f7c40.png} +0 -0
- /kotonebot/kaa/sprites/{dd4c523c-1286-4f68-89f5-371464aa138c.png → 87a59b06-0ac7-4a35-93c4-3705bf9e774a.png} +0 -0
- /kotonebot/kaa/sprites/{e703f139-9612-4e4a-be30-db32423d57d9.png → 898325da-307d-4108-ab4c-25d9ae94ee24.png} +0 -0
- /kotonebot/kaa/sprites/{501eaf11-021e-4764-93ed-0be6ea0ed5df.png → 899ad2c0-7b23-4b77-aed4-34ba4911672b.png} +0 -0
- /kotonebot/kaa/sprites/{1a4c5291-70a9-4923-aadf-f7e6a28c7aa5.png → 97e33fa0-1442-418d-b393-3b916312c9e1.png} +0 -0
- /kotonebot/kaa/sprites/{6a7eacf1-f14e-45cf-8ef7-7f933d4fa664.png → 99b58811-42ff-415b-9229-f5c75cbe1a1a.png} +0 -0
- /kotonebot/kaa/sprites/{1470cd16-3340-4a0a-854f-3acf9b882cb1.png → 9d94c24c-5aab-4fb6-8fa7-902cebac134c.png} +0 -0
- /kotonebot/kaa/sprites/{62a4c9fd-35e6-4982-b9f4-e3a5685eac13.png → 9e861b2e-f896-4738-b0d0-9b703395720d.png} +0 -0
- /kotonebot/kaa/sprites/{ed331876-f724-4a9f-a494-7823be883a76.png → a586f586-85e9-439e-ab3f-905d6cbe6746.png} +0 -0
- /kotonebot/kaa/sprites/{ce0df3fa-5d88-4b20-9cf1-6b4abac4c110.png → acd01a53-c689-4ffd-ae45-744a37c70197.png} +0 -0
- /kotonebot/kaa/sprites/{4fe4fbf2-4dbf-44d2-8dd6-a3f3c9f0d1b7.png → acd1a611-f93d-4d32-8070-dc325b42eeb9.png} +0 -0
- /kotonebot/kaa/sprites/{6f342de5-b179-4120-ab6d-404c3eee5caa.png → adf0eea7-a052-410b-b479-8c672ae38268.png} +0 -0
- /kotonebot/kaa/sprites/{49e46cda-a6ac-44c8-8901-60956ca5151d.png → af0f65a5-8d32-4211-86df-66b3fa609462.png} +0 -0
- /kotonebot/kaa/sprites/{2a0e9656-26ba-4d7a-a414-6045e521b92c.png → b2743383-a3e4-43ff-82a3-3c7c6450fc50.png} +0 -0
- /kotonebot/kaa/sprites/{e89906b2-7354-4724-80ef-7c7fe5cd3ef5.png → b2f31f86-b7ae-4eb1-8042-d14c5b226714.png} +0 -0
- /kotonebot/kaa/sprites/{2fc3fa82-cc3d-4164-839f-d0bd7f8a32f5.png → b720a22b-a2f1-4686-969d-2a2edd8fb96b.png} +0 -0
- /kotonebot/kaa/sprites/{277035b5-7eee-4ca8-80dd-f73d78e7531f.png → b73fa422-bf9c-43aa-ad80-ae92286042e6.png} +0 -0
- /kotonebot/kaa/sprites/{9b425fee-9118-4015-9242-29bf1150e704.png → b974e1ac-1f24-4498-aa84-62cb5c0984e7.png} +0 -0
- /kotonebot/kaa/sprites/{f897b52f-b9d8-4d94-9d98-1ed6bf7b6c76.png → bad07ebd-c8e7-4721-ab74-a38fa30e0401.png} +0 -0
- /kotonebot/kaa/sprites/{884a25c2-7b98-4a33-a975-6f918a8301aa.png → bbfb7670-2537-4a92-9a39-487d174f27a0.png} +0 -0
- /kotonebot/kaa/sprites/{bf44c221-0af9-497e-a2e8-cdc497348257.png → bcb990e6-58ae-460d-859a-812b4121e716.png} +0 -0
- /kotonebot/kaa/sprites/{74e207b4-a13e-47cc-bf23-dbf77089ea3c.png → bfd495eb-7ec2-47d7-aff2-59c1a663be5d.png} +0 -0
- /kotonebot/kaa/sprites/{441c2df2-43ac-4ff3-814e-6230c510bce6.png → c1336997-ea27-4d53-9c64-826ca7eca11f.png} +0 -0
- /kotonebot/kaa/sprites/{1db583b2-c82a-4576-9ca9-b7409bc1ca95.png → c639b2f6-35f2-4924-9e81-878637c176a6.png} +0 -0
- /kotonebot/kaa/sprites/{bc94b664-bbcf-4b59-8e4b-7dbf03997309.png → c686d99a-248a-460b-a4fe-2fa5b8e9660b.png} +0 -0
- /kotonebot/kaa/sprites/{43550662-cd46-4312-b18b-949cba98d173.png → c692a9b3-8a2a-42f1-8f63-ad8bd553272d.png} +0 -0
- /kotonebot/kaa/sprites/{d2a8f04f-38c1-4a67-8c57-43e0334887ef.png → c7e90767-3661-4e86-8c54-8e1d1e83d113.png} +0 -0
- /kotonebot/kaa/sprites/{feb8f473-8a2e-40a5-b6e0-dffafd35edc1.png → c9e507d5-94dd-4ff3-b995-70c6cb360095.png} +0 -0
- /kotonebot/kaa/sprites/{559485ee-a27f-4824-ad7a-e57d0c613ed5.png → cdc6e5e2-5b38-4471-b23f-17ec229268db.png} +0 -0
- /kotonebot/kaa/sprites/{62031705-40e0-4b74-b7b9-07f1fffd122f.png → d07f0d30-465e-4b4e-803f-a81aeabdd1e8.png} +0 -0
- /kotonebot/kaa/sprites/{44430184-c35e-4bb8-8858-ed5cec580c36.png → d108794a-60b8-4637-bced-84f46140eaac.png} +0 -0
- /kotonebot/kaa/sprites/{db375f07-c682-4aae-880a-a2cf13d0dac0.png → d43f214a-4db4-4222-941c-3d3216a0c0c3.png} +0 -0
- /kotonebot/kaa/sprites/{ee7f4e24-6cbc-41ed-9327-d6843ac6a820.png → d5899bda-b311-469d-b4fb-963799ef1720.png} +0 -0
- /kotonebot/kaa/sprites/{c696843a-1e17-4c0d-a92c-eb54f9356daf.png → d7d6ace9-35f1-4c71-b4c1-9de938b254f4.png} +0 -0
- /kotonebot/kaa/sprites/{359e43b3-6b85-4f8c-86a1-4d4c1ae75779.png → dd431a8a-3ffa-43d6-96c6-4e84aa946b72.png} +0 -0
- /kotonebot/kaa/sprites/{e47acec2-3466-419a-acad-30618239aab9.png → dfb1d18d-b768-46c4-9d31-b654ba7a2b6d.png} +0 -0
- /kotonebot/kaa/sprites/{69266fc9-c8fe-48ea-8d68-8ace8c606049.png → e007420c-b92b-414c-96a3-d556e3c25cb2.png} +0 -0
- /kotonebot/kaa/sprites/{f6063ed7-f59e-4c37-93e2-026c805826ea.png → e614c8e1-1d7b-4535-a8ba-cbf09fd5b163.png} +0 -0
- /kotonebot/kaa/sprites/{bff85e9a-df48-429f-a82e-ceff41f8527b.png → e64c9477-35f7-4f05-995f-f3f38bb7db66.png} +0 -0
- /kotonebot/kaa/sprites/{109ff896-1f96-465a-ad6f-ef410789e140.png → e6a16a1e-e821-45f0-bc64-f2e0dab7efd7.png} +0 -0
- /kotonebot/kaa/sprites/{b5d02984-ec1f-48f5-8593-0bc0e4babc1f.png → e6d0979a-cd27-4933-b528-7777be525ace.png} +0 -0
- /kotonebot/kaa/sprites/{a53820f6-1572-413a-b7b1-2bc08690884f.png → e798ff2f-6f30-4536-923a-a65433817423.png} +0 -0
- /kotonebot/kaa/sprites/{24cdb395-915e-4816-9406-efd1aafa70c1.png → e87f0760-4bc9-4d7f-91e2-5452ba0fcd9d.png} +0 -0
- /kotonebot/kaa/sprites/{a388f87d-9a69-4189-b80a-e230d7d7b964.png → e93a983d-b869-45e4-8a5c-cd1c9d511b11.png} +0 -0
- /kotonebot/kaa/sprites/{156d67bb-562c-42df-b55a-aea0b6ad71dd.png → f18c683d-1eb2-4279-a05c-c411683354df.png} +0 -0
- /kotonebot/kaa/sprites/{c4985caa-1e42-4980-9a76-a660a7b12c67.png → f26d4e09-2511-48e4-9c69-ba413ddf65e1.png} +0 -0
- /kotonebot/kaa/sprites/{2fd135e1-8010-4a53-90a3-2a950c5a43bf.png → f2d614b3-d3bf-4340-b261-f4c385a59e4e.png} +0 -0
- /kotonebot/kaa/sprites/{982d2e5d-4493-44a5-b922-e71649fd6bc5.png → f3e4e9ec-ddd6-42c4-9638-b93ff4e6b514.png} +0 -0
- /kotonebot/kaa/sprites/{0a0dfcba-7ae4-415a-9361-7f3c4ec16ef9.png → f5917c99-185e-4bd9-b367-972c77accb44.png} +0 -0
- /kotonebot/kaa/sprites/{a26dc021-2a28-4f79-bd11-48c4a1261f0d.png → f957edb2-3534-4d1d-a9be-70b478b2ff63.png} +0 -0
- /kotonebot/kaa/sprites/{ac4579ad-2000-4283-8e13-53fe525725bf.png → f9b38a5e-72cb-4b18-8817-18473effd41d.png} +0 -0
- /kotonebot/kaa/sprites/{cc959ce4-8619-4bd7-8a85-02f97cf6cc51.png → f9e8cde8-fda0-4436-8072-6bc32c3c0b8e.png} +0 -0
- /kotonebot/kaa/sprites/{525b6f3a-acc8-4bd8-be4b-cc1f44fb377a.png → fc44214e-ef8a-4ea1-baec-35674ce0c4d6.png} +0 -0
- /kotonebot/kaa/sprites/{3ea8a020-5605-47ce-8d3a-d812d0583058.png → fffa0118-dd3a-4d01-8c4e-d43182778391.png} +0 -0
- {ksaa-2025.7.3.0.dist-info → ksaa-2025.7.7.0.dist-info}/WHEEL +0 -0
- {ksaa-2025.7.3.0.dist-info → ksaa-2025.7.7.0.dist-info}/entry_points.txt +0 -0
- {ksaa-2025.7.3.0.dist-info → ksaa-2025.7.7.0.dist-info}/licenses/LICENSE +0 -0
- {ksaa-2025.7.3.0.dist-info → ksaa-2025.7.7.0.dist-info}/top_level.txt +0 -0
kotonebot/backend/bot.py
CHANGED
|
@@ -145,6 +145,18 @@ class KotoneBot:
|
|
|
145
145
|
"""
|
|
146
146
|
raise NotImplementedError('Implement `_create_device` before using Kotonebot.')
|
|
147
147
|
|
|
148
|
+
def _on_init_context(self) -> None:
|
|
149
|
+
"""
|
|
150
|
+
初始化 Context 的钩子方法。子类可以重写此方法来自定义初始化逻辑。
|
|
151
|
+
默认实现调用 init_context 而不传入 target_screenshot_interval。
|
|
152
|
+
"""
|
|
153
|
+
d = self._on_create_device()
|
|
154
|
+
init_context(
|
|
155
|
+
config_path=self.config_path,
|
|
156
|
+
config_type=self.config_type,
|
|
157
|
+
target_device=d
|
|
158
|
+
)
|
|
159
|
+
|
|
148
160
|
def _on_after_init_context(self):
|
|
149
161
|
"""
|
|
150
162
|
抽象方法,在 init_context() 被调用后立即执行。
|
|
@@ -155,8 +167,7 @@ class KotoneBot:
|
|
|
155
167
|
"""
|
|
156
168
|
按优先级顺序运行所有任务。
|
|
157
169
|
"""
|
|
158
|
-
|
|
159
|
-
init_context(config_path=self.config_path, config_type=self.config_type, target_device=d)
|
|
170
|
+
self._on_init_context()
|
|
160
171
|
self._on_after_init_context()
|
|
161
172
|
vars.flow.clear_interrupt()
|
|
162
173
|
|
|
@@ -27,6 +27,7 @@ from cv2.typing import MatLike
|
|
|
27
27
|
|
|
28
28
|
from kotonebot.client.device import Device, AndroidDevice, WindowsDevice
|
|
29
29
|
from kotonebot.backend.flow_controller import FlowController
|
|
30
|
+
from kotonebot.util import Interval
|
|
30
31
|
import kotonebot.backend.image as raw_image
|
|
31
32
|
from kotonebot.backend.image import (
|
|
32
33
|
TemplateMatchResult,
|
|
@@ -718,8 +719,20 @@ class Forwarded:
|
|
|
718
719
|
|
|
719
720
|
T_Device = TypeVar('T_Device', bound=Device)
|
|
720
721
|
class ContextDevice(Generic[T_Device], Device):
|
|
721
|
-
def __init__(self, device: T_Device):
|
|
722
|
+
def __init__(self, device: T_Device, target_screenshot_interval: float | None = None):
|
|
723
|
+
"""
|
|
724
|
+
:param device: 目标设备。
|
|
725
|
+
:param target_screenshot_interval: 见 `ContextDevice.target_screenshot_interval`。
|
|
726
|
+
"""
|
|
722
727
|
self._device = device
|
|
728
|
+
self.target_screenshot_interval: float | None = target_screenshot_interval
|
|
729
|
+
"""
|
|
730
|
+
目标截图间隔,可用于限制截图速度。若两次截图实际间隔小于该值,则会自动等待。
|
|
731
|
+
为 None 时不限制截图速度。
|
|
732
|
+
"""
|
|
733
|
+
self._screenshot_interval: Interval | None = None
|
|
734
|
+
if self.target_screenshot_interval is not None:
|
|
735
|
+
self._screenshot_interval = Interval(self.target_screenshot_interval)
|
|
723
736
|
|
|
724
737
|
def screenshot(self, *, force: bool = False):
|
|
725
738
|
"""
|
|
@@ -734,6 +747,9 @@ class ContextDevice(Generic[T_Device], Device):
|
|
|
734
747
|
img = current._inherit_screenshot
|
|
735
748
|
current._inherit_screenshot = None
|
|
736
749
|
else:
|
|
750
|
+
if self._screenshot_interval is not None:
|
|
751
|
+
self._screenshot_interval.wait()
|
|
752
|
+
|
|
737
753
|
if next_wait == 'screenshot':
|
|
738
754
|
delta = time.time() - last_screenshot_time
|
|
739
755
|
if delta < next_wait_time:
|
|
@@ -780,7 +796,8 @@ class Context(Generic[T]):
|
|
|
780
796
|
self,
|
|
781
797
|
config_path: str,
|
|
782
798
|
config_type: Type[T],
|
|
783
|
-
device: Device
|
|
799
|
+
device: Device,
|
|
800
|
+
target_screenshot_interval: float | None = None
|
|
784
801
|
):
|
|
785
802
|
self.__ocr = ContextOcr(self)
|
|
786
803
|
self.__image = ContextImage(self)
|
|
@@ -788,7 +805,7 @@ class Context(Generic[T]):
|
|
|
788
805
|
self.__vars = ContextGlobalVars()
|
|
789
806
|
self.__debug = ContextDebug(self)
|
|
790
807
|
self.__config = ContextConfig[T](self, config_path, config_type)
|
|
791
|
-
self.__device = ContextDevice(device)
|
|
808
|
+
self.__device = ContextDevice(device, target_screenshot_interval)
|
|
792
809
|
|
|
793
810
|
def inject(
|
|
794
811
|
self,
|
|
@@ -900,6 +917,7 @@ def init_context(
|
|
|
900
917
|
config_type: Type[T] = dict[str, Any],
|
|
901
918
|
force: bool = False,
|
|
902
919
|
target_device: Device,
|
|
920
|
+
target_screenshot_interval: float | None = None,
|
|
903
921
|
):
|
|
904
922
|
"""
|
|
905
923
|
初始化 Context 模块。
|
|
@@ -911,6 +929,7 @@ def init_context(
|
|
|
911
929
|
:param force: 是否强制重新初始化。
|
|
912
930
|
若为 `True`,则忽略已存在的 Context 实例,并重新创建一个新的实例。
|
|
913
931
|
:param target_device: 目标设备
|
|
932
|
+
:param target_screenshot_interval: 见 `ContextDevice.target_screenshot_interval`。
|
|
914
933
|
"""
|
|
915
934
|
global _c, device, ocr, image, color, vars, debug, config
|
|
916
935
|
if _c is not None and not force:
|
|
@@ -919,6 +938,7 @@ def init_context(
|
|
|
919
938
|
config_path=config_path,
|
|
920
939
|
config_type=config_type,
|
|
921
940
|
device=target_device,
|
|
941
|
+
target_screenshot_interval=target_screenshot_interval,
|
|
922
942
|
)
|
|
923
943
|
device._FORWARD_getter = lambda: _c.device # type: ignore
|
|
924
944
|
ocr._FORWARD_getter = lambda: _c.ocr # type: ignore
|
kotonebot/client/device.py
CHANGED
|
@@ -29,31 +29,6 @@ class HookContextManager:
|
|
|
29
29
|
def __exit__(self, exc_type, exc_value, traceback):
|
|
30
30
|
self.device.screenshot_hook_after = self.old_func
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
class PinContextManager:
|
|
34
|
-
def __init__(self, device: 'Device'):
|
|
35
|
-
self.device = device
|
|
36
|
-
self.old_hook = device.screenshot_hook_before
|
|
37
|
-
self.memo = None
|
|
38
|
-
|
|
39
|
-
def __hook(self) -> MatLike:
|
|
40
|
-
if self.memo is None:
|
|
41
|
-
self.memo = self.device.screenshot_raw()
|
|
42
|
-
return self.memo
|
|
43
|
-
|
|
44
|
-
def __enter__(self):
|
|
45
|
-
self.device.screenshot_hook_before = self.__hook
|
|
46
|
-
return self
|
|
47
|
-
|
|
48
|
-
def __exit__(self, exc_type, exc_value, traceback):
|
|
49
|
-
self.device.screenshot_hook_before = self.old_hook
|
|
50
|
-
|
|
51
|
-
def update(self) -> None:
|
|
52
|
-
"""
|
|
53
|
-
更新记住的截图
|
|
54
|
-
"""
|
|
55
|
-
self.memo = self.device.screenshot_raw()
|
|
56
|
-
|
|
57
32
|
class Device:
|
|
58
33
|
def __init__(self, platform: str = 'unknown') -> None:
|
|
59
34
|
self.screenshot_hook_after: Callable[[MatLike], MatLike] | None = None
|
|
@@ -356,16 +331,6 @@ class Device:
|
|
|
356
331
|
"""
|
|
357
332
|
return HookContextManager(self, func)
|
|
358
333
|
|
|
359
|
-
@deprecated('改用 @task/@action 装饰器中的 screenshot_mode 参数')
|
|
360
|
-
def pinned(self) -> PinContextManager:
|
|
361
|
-
"""
|
|
362
|
-
记住下次截图结果,并将截图调整为手动挡。
|
|
363
|
-
之后截图都会返回记住的数据,节省重复截图时间。
|
|
364
|
-
|
|
365
|
-
调用返回对象中的 PinContextManager.update() 可以立刻更新记住的截图。
|
|
366
|
-
"""
|
|
367
|
-
return PinContextManager(self)
|
|
368
|
-
|
|
369
334
|
@property
|
|
370
335
|
def screen_size(self) -> tuple[int, int]:
|
|
371
336
|
"""
|
kotonebot/config/base_config.py
CHANGED
|
@@ -50,6 +50,8 @@ class BackendConfig(ConfigBaseModel):
|
|
|
50
50
|
"""Windows 截图方式的 AutoHotkey 可执行文件路径,为 None 时使用默认路径"""
|
|
51
51
|
mumu_background_mode: bool = False
|
|
52
52
|
"""MuMu12 模拟器后台保活模式"""
|
|
53
|
+
target_screenshot_interval: float | None = None
|
|
54
|
+
"""最小截图间隔,单位为秒。为 None 时不限制截图速度。"""
|
|
53
55
|
|
|
54
56
|
class PushConfig(ConfigBaseModel):
|
|
55
57
|
"""推送配置。"""
|
kotonebot/kaa/common.py
CHANGED
|
@@ -80,7 +80,7 @@ class DailyMoneyShopItems(IntEnum):
|
|
|
80
80
|
"""紫云清夏 Tame-Lie-One-Step 碎片"""
|
|
81
81
|
IdolPiece_葛城リーリヤ_白線 = 17
|
|
82
82
|
"""葛城リーリヤ 白線 碎片"""
|
|
83
|
-
IdolPiece_
|
|
83
|
+
IdolPiece_姬崎莉波_clumsy_trick = 18
|
|
84
84
|
"""姫崎薪波 cIclumsy trick 碎片"""
|
|
85
85
|
IdolPiece_花海咲季_FightingMyWay = 19
|
|
86
86
|
"""花海咲季 FightingMyWay 碎片"""
|
|
@@ -90,6 +90,8 @@ class DailyMoneyShopItems(IntEnum):
|
|
|
90
90
|
"""花海佑芽 The Rolling Riceball 碎片"""
|
|
91
91
|
IdolPiece_月村手毬_LunaSayMaybe = 22
|
|
92
92
|
"""月村手毬 Luna say maybe 碎片"""
|
|
93
|
+
IdolPiece_有村麻央_Fluorite = 23
|
|
94
|
+
"""有村麻央 Fluorite 碎片"""
|
|
93
95
|
|
|
94
96
|
@classmethod
|
|
95
97
|
def to_ui_text(cls, item: "DailyMoneyShopItems") -> str:
|
|
@@ -126,23 +128,25 @@ class DailyMoneyShopItems(IntEnum):
|
|
|
126
128
|
case cls.RecordKey:
|
|
127
129
|
return "记录钥匙"
|
|
128
130
|
case cls.IdolPiece_倉本千奈_WonderScale:
|
|
129
|
-
return "倉本千奈
|
|
131
|
+
return "倉本千奈 WonderScale 碎片"
|
|
130
132
|
case cls.IdolPiece_篠泽广_光景:
|
|
131
|
-
return "篠泽广
|
|
133
|
+
return "篠泽广 光景 碎片"
|
|
132
134
|
case cls.IdolPiece_紫云清夏_TameLieOneStep:
|
|
133
|
-
return "紫云清夏
|
|
135
|
+
return "紫云清夏 Tame-Lie-One-Step 碎片"
|
|
134
136
|
case cls.IdolPiece_葛城リーリヤ_白線:
|
|
135
|
-
return "葛城リーリヤ
|
|
136
|
-
case cls.IdolPiece_
|
|
137
|
-
return "姫崎薪波
|
|
137
|
+
return "葛城リーリヤ 白線 碎片"
|
|
138
|
+
case cls.IdolPiece_姬崎莉波_clumsy_trick:
|
|
139
|
+
return "姫崎薪波 clumsy trick 碎片"
|
|
138
140
|
case cls.IdolPiece_花海咲季_FightingMyWay:
|
|
139
|
-
return "花海咲季
|
|
141
|
+
return "花海咲季 FightingMyWay 碎片"
|
|
140
142
|
case cls.IdolPiece_藤田ことね_世界一可愛い私:
|
|
141
|
-
return "藤田ことね
|
|
143
|
+
return "藤田ことね 世界一可愛い私 碎片"
|
|
142
144
|
case cls.IdolPiece_花海佑芽_TheRollingRiceball:
|
|
143
|
-
return "花海佑芽
|
|
145
|
+
return "花海佑芽 The Rolling Riceball 碎片"
|
|
144
146
|
case cls.IdolPiece_月村手毬_LunaSayMaybe:
|
|
145
|
-
return "月村手毬
|
|
147
|
+
return "月村手毬 Luna say maybe 碎片"
|
|
148
|
+
case cls.IdolPiece_有村麻央_Fluorite:
|
|
149
|
+
return "有村麻央 Fluorite 碎片"
|
|
146
150
|
case _:
|
|
147
151
|
assert_never(item)
|
|
148
152
|
|
|
@@ -202,8 +206,8 @@ class DailyMoneyShopItems(IntEnum):
|
|
|
202
206
|
return R.Shop.IdolPiece.紫云清夏_TameLieOneStep
|
|
203
207
|
case DailyMoneyShopItems.IdolPiece_葛城リーリヤ_白線:
|
|
204
208
|
return R.Shop.IdolPiece.葛城リーリヤ_白線
|
|
205
|
-
case DailyMoneyShopItems.IdolPiece_
|
|
206
|
-
return R.Shop.IdolPiece
|
|
209
|
+
case DailyMoneyShopItems.IdolPiece_姬崎莉波_clumsy_trick:
|
|
210
|
+
return R.Shop.IdolPiece.姬崎莉波_clumsy_trick
|
|
207
211
|
case DailyMoneyShopItems.IdolPiece_花海咲季_FightingMyWay:
|
|
208
212
|
return R.Shop.IdolPiece.花海咲季_FightingMyWay
|
|
209
213
|
case DailyMoneyShopItems.IdolPiece_藤田ことね_世界一可愛い私:
|
|
@@ -212,6 +216,8 @@ class DailyMoneyShopItems(IntEnum):
|
|
|
212
216
|
return R.Shop.IdolPiece.花海佑芽_TheRollingRiceball
|
|
213
217
|
case DailyMoneyShopItems.IdolPiece_月村手毬_LunaSayMaybe:
|
|
214
218
|
return R.Shop.IdolPiece.月村手毬_LunaSayMaybe
|
|
219
|
+
case DailyMoneyShopItems.IdolPiece_有村麻央_Fluorite:
|
|
220
|
+
return R.Shop.IdolPiece.有村麻央_Fluorite
|
|
215
221
|
case _:
|
|
216
222
|
assert_never(self)
|
|
217
223
|
|
|
@@ -225,13 +231,9 @@ class PurchaseConfig(ConfigBaseModel):
|
|
|
225
231
|
"""是否启用金币购买"""
|
|
226
232
|
money_items: list[DailyMoneyShopItems] = []
|
|
227
233
|
"""金币商店要购买的物品"""
|
|
228
|
-
|
|
234
|
+
money_refresh: bool = True
|
|
229
235
|
"""
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
* never: 从不刷新。
|
|
233
|
-
* not_found: 仅当要购买的物品不存在时刷新。
|
|
234
|
-
* always: 总是刷新。
|
|
236
|
+
是否使用每日一次免费刷新金币商店。
|
|
235
237
|
"""
|
|
236
238
|
ap_enabled: bool = False
|
|
237
239
|
"""是否启用AP购买"""
|
|
@@ -465,16 +467,22 @@ class MiscConfig(ConfigBaseModel):
|
|
|
465
467
|
check_update: Literal['never', 'startup'] = 'startup'
|
|
466
468
|
"""
|
|
467
469
|
检查更新时机。
|
|
468
|
-
|
|
470
|
+
|
|
469
471
|
* never: 从不检查更新。
|
|
470
472
|
* startup: 启动时检查更新。
|
|
471
473
|
"""
|
|
472
474
|
auto_install_update: bool = True
|
|
473
475
|
"""
|
|
474
476
|
是否自动安装更新。
|
|
475
|
-
|
|
477
|
+
|
|
476
478
|
若启用,则每次自动检查更新时若有新版本会自动安装,否则只是会提示。
|
|
477
479
|
"""
|
|
480
|
+
expose_to_lan: bool = False
|
|
481
|
+
"""
|
|
482
|
+
是否允许局域网访问 Web 界面。
|
|
483
|
+
|
|
484
|
+
启用后,局域网内的其他设备可以通过本机 IP 地址访问 Web 界面。
|
|
485
|
+
"""
|
|
478
486
|
|
|
479
487
|
class BaseConfig(ConfigBaseModel):
|
|
480
488
|
purchase: PurchaseConfig = PurchaseConfig()
|
kotonebot/kaa/game_ui/toolbar.py
CHANGED
|
@@ -34,10 +34,11 @@ def toolbar_menu(critical: Literal[True]) -> TemplateMatchResult:
|
|
|
34
34
|
"""寻找工具栏上的菜单按钮。若未找到,则抛出异常。"""
|
|
35
35
|
...
|
|
36
36
|
|
|
37
|
+
_TOOLBAR_THRESHOLD = 0.6
|
|
37
38
|
@action('工具栏按钮.寻找菜单', screenshot_mode='manual-inherit')
|
|
38
39
|
def toolbar_menu(critical: bool = False):
|
|
39
40
|
device.screenshot()
|
|
40
41
|
if critical:
|
|
41
|
-
return image.expect_wait(R.Common.ButtonToolbarMenu, preprocessors=[WhiteFilter()])
|
|
42
|
+
return image.expect_wait(R.Common.ButtonToolbarMenu, preprocessors=[WhiteFilter()], threshold=_TOOLBAR_THRESHOLD)
|
|
42
43
|
else:
|
|
43
|
-
return image.find(R.Common.ButtonToolbarMenu, preprocessors=[WhiteFilter()])
|
|
44
|
+
return image.find(R.Common.ButtonToolbarMenu, preprocessors=[WhiteFilter()], threshold=_TOOLBAR_THRESHOLD)
|
kotonebot/kaa/main/gr.py
CHANGED
|
@@ -37,12 +37,12 @@ ConfigKey = Literal[
|
|
|
37
37
|
'check_emulator', 'emulator_path',
|
|
38
38
|
'adb_emulator_name', 'emulator_args',
|
|
39
39
|
'_mumu_index', '_leidian_index',
|
|
40
|
-
'mumu_background_mode',
|
|
40
|
+
'mumu_background_mode', 'target_screenshot_interval',
|
|
41
41
|
|
|
42
42
|
# purchase
|
|
43
43
|
'purchase_enabled',
|
|
44
44
|
'money_enabled', 'ap_enabled',
|
|
45
|
-
'ap_items', 'money_items',
|
|
45
|
+
'ap_items', 'money_items', 'money_refresh',
|
|
46
46
|
|
|
47
47
|
# assignment
|
|
48
48
|
'assignment_enabled',
|
|
@@ -92,8 +92,8 @@ ConfigKey = Literal[
|
|
|
92
92
|
'trace_recommend_card_detection',
|
|
93
93
|
|
|
94
94
|
# misc
|
|
95
|
-
'check_update', 'auto_install_update',
|
|
96
|
-
|
|
95
|
+
'check_update', 'auto_install_update', 'expose_to_lan',
|
|
96
|
+
|
|
97
97
|
'_selected_backend_index'
|
|
98
98
|
|
|
99
99
|
]
|
|
@@ -761,6 +761,15 @@ class KotoneBotUI:
|
|
|
761
761
|
interactive=True
|
|
762
762
|
)
|
|
763
763
|
|
|
764
|
+
target_screenshot_interval = gr.Number(
|
|
765
|
+
label="最小截图间隔(秒)",
|
|
766
|
+
value=self.current_config.backend.target_screenshot_interval,
|
|
767
|
+
info=BackendConfig.model_fields['target_screenshot_interval'].description,
|
|
768
|
+
minimum=0,
|
|
769
|
+
step=0.1,
|
|
770
|
+
interactive=True
|
|
771
|
+
)
|
|
772
|
+
|
|
764
773
|
tab_mumu12.select(fn=partial(_update_emulator_tab_options, selected_index=0), inputs=[screenshot_impl], outputs=[screenshot_impl])
|
|
765
774
|
tab_leidian.select(fn=partial(_update_emulator_tab_options, selected_index=1), inputs=[screenshot_impl], outputs=[screenshot_impl])
|
|
766
775
|
tab_custom.select(fn=partial(_update_emulator_tab_options, selected_index=2), inputs=[screenshot_impl], outputs=[screenshot_impl])
|
|
@@ -814,12 +823,14 @@ class KotoneBotUI:
|
|
|
814
823
|
|
|
815
824
|
# Common settings for all backend types
|
|
816
825
|
self.current_config.backend.screenshot_impl = data['screenshot_method']
|
|
826
|
+
self.current_config.backend.target_screenshot_interval = data['target_screenshot_interval']
|
|
817
827
|
self.current_config.keep_screenshots = data['keep_screenshots'] # This is a UserConfig field
|
|
818
828
|
|
|
819
829
|
return set_config, {
|
|
820
830
|
'adb_ip': adb_ip,
|
|
821
831
|
'adb_port': adb_port,
|
|
822
832
|
'screenshot_method': screenshot_impl, # screenshot_impl is the component
|
|
833
|
+
'target_screenshot_interval': target_screenshot_interval,
|
|
823
834
|
'keep_screenshots': keep_screenshots,
|
|
824
835
|
'check_emulator': check_emulator,
|
|
825
836
|
'emulator_path': emulator_path,
|
|
@@ -854,6 +865,12 @@ class KotoneBotUI:
|
|
|
854
865
|
info=PurchaseConfig.model_fields['money_items'].description
|
|
855
866
|
)
|
|
856
867
|
|
|
868
|
+
money_refresh = gr.Checkbox(
|
|
869
|
+
label="每日一次免费刷新金币商店",
|
|
870
|
+
value=self.current_config.options.purchase.money_refresh,
|
|
871
|
+
info=PurchaseConfig.model_fields['money_refresh'].description
|
|
872
|
+
)
|
|
873
|
+
|
|
857
874
|
ap_enabled = gr.Checkbox(
|
|
858
875
|
label="启用AP购买",
|
|
859
876
|
value=self.current_config.options.purchase.ap_enabled,
|
|
@@ -891,6 +908,7 @@ class KotoneBotUI:
|
|
|
891
908
|
config.purchase.enabled = data['purchase_enabled']
|
|
892
909
|
config.purchase.money_enabled = data['money_enabled']
|
|
893
910
|
config.purchase.money_items = [DailyMoneyShopItems(x) for x in data['money_items']]
|
|
911
|
+
config.purchase.money_refresh = data['money_refresh']
|
|
894
912
|
config.purchase.ap_enabled = data['ap_enabled']
|
|
895
913
|
ap_items_enum: List[Literal[0, 1, 2, 3]] = []
|
|
896
914
|
ap_items_map: Dict[str, APShopItems] = {
|
|
@@ -909,7 +927,8 @@ class KotoneBotUI:
|
|
|
909
927
|
'money_enabled': money_enabled,
|
|
910
928
|
'ap_enabled': ap_enabled,
|
|
911
929
|
'ap_items': ap_items,
|
|
912
|
-
'money_items': money_items
|
|
930
|
+
'money_items': money_items,
|
|
931
|
+
'money_refresh': money_refresh
|
|
913
932
|
}
|
|
914
933
|
|
|
915
934
|
def _create_work_settings(self) -> ConfigBuilderReturnValue:
|
|
@@ -1494,14 +1513,22 @@ class KotoneBotUI:
|
|
|
1494
1513
|
info=MiscConfig.model_fields['auto_install_update'].description,
|
|
1495
1514
|
interactive=True
|
|
1496
1515
|
)
|
|
1497
|
-
|
|
1516
|
+
expose_to_lan = gr.Checkbox(
|
|
1517
|
+
label="允许局域网访问",
|
|
1518
|
+
value=self.current_config.options.misc.expose_to_lan,
|
|
1519
|
+
info=MiscConfig.model_fields['expose_to_lan'].description,
|
|
1520
|
+
interactive=True
|
|
1521
|
+
)
|
|
1522
|
+
|
|
1498
1523
|
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
1499
1524
|
config.misc.check_update = data['check_update']
|
|
1500
1525
|
config.misc.auto_install_update = data['auto_install_update']
|
|
1526
|
+
config.misc.expose_to_lan = data['expose_to_lan']
|
|
1501
1527
|
|
|
1502
1528
|
return set_config, {
|
|
1503
1529
|
'check_update': check_update,
|
|
1504
|
-
'auto_install_update': auto_install_update
|
|
1530
|
+
'auto_install_update': auto_install_update,
|
|
1531
|
+
'expose_to_lan': expose_to_lan
|
|
1505
1532
|
}
|
|
1506
1533
|
|
|
1507
1534
|
def _create_settings_tab(self) -> None:
|
|
@@ -1888,7 +1915,9 @@ def main(kaa: Kaa | None = None) -> None:
|
|
|
1888
1915
|
kaa = kaa or Kaa('./config.json')
|
|
1889
1916
|
ui = KotoneBotUI(kaa)
|
|
1890
1917
|
app = ui.create_ui()
|
|
1891
|
-
|
|
1918
|
+
|
|
1919
|
+
server_name = "0.0.0.0" if ui.current_config.options.misc.expose_to_lan else "127.0.0.1"
|
|
1920
|
+
app.launch(inbrowser=True, show_error=True, server_name=server_name)
|
|
1892
1921
|
|
|
1893
1922
|
if __name__ == "__main__":
|
|
1894
1923
|
main()
|
kotonebot/kaa/main/kaa.py
CHANGED
|
@@ -110,6 +110,27 @@ class Kaa(KotoneBot):
|
|
|
110
110
|
logger.exception('Failed to save error report:')
|
|
111
111
|
return ''
|
|
112
112
|
|
|
113
|
+
@override
|
|
114
|
+
def _on_init_context(self) -> None:
|
|
115
|
+
"""
|
|
116
|
+
初始化 Context,从配置中读取 target_screenshot_interval。
|
|
117
|
+
"""
|
|
118
|
+
from kotonebot.config.manager import load_config
|
|
119
|
+
from kotonebot.backend.context import init_context
|
|
120
|
+
|
|
121
|
+
# 加载配置以获取 target_screenshot_interval
|
|
122
|
+
config = load_config(self.config_path, type=self.config_type)
|
|
123
|
+
user_config = config.user_configs[0] # HACK: 硬编码
|
|
124
|
+
target_screenshot_interval = user_config.backend.target_screenshot_interval
|
|
125
|
+
|
|
126
|
+
d = self._on_create_device()
|
|
127
|
+
init_context(
|
|
128
|
+
config_path=self.config_path,
|
|
129
|
+
config_type=self.config_type,
|
|
130
|
+
target_device=d,
|
|
131
|
+
target_screenshot_interval=target_screenshot_interval
|
|
132
|
+
)
|
|
133
|
+
|
|
113
134
|
@override
|
|
114
135
|
def _on_after_init_context(self):
|
|
115
136
|
if self.backend_instance is None:
|
kotonebot/kaa/metadata.py
CHANGED
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
WHATS_NEW = """
|
|
2
2
|
# 更新日志
|
|
3
3
|
## kaa
|
|
4
|
+
### v2025.7.7.0
|
|
5
|
+
脚本:
|
|
6
|
+
* [修复] 修复 AP 商店购买时点击坐标偏移问题(#b8b56bb)
|
|
7
|
+
* [修复] 修复商店购买时无法识别部分偶像碎片的问题(#353fa3f)
|
|
8
|
+
* [修复] 修复 DMM 版购买时无法进入 AP 商店的问题(#f5a4e50)
|
|
9
|
+
* [修复] 修复商店购买有几率卡在确认购买对话框上(#cf1605d)
|
|
10
|
+
* [修复] 修复某些情况下无法自动关闭领取活动费后的弹窗(#3b3aac6)
|
|
11
|
+
* [新增] 金币商店可选使用每日刷新次数(#68dbc48)
|
|
12
|
+
|
|
13
|
+
界面:
|
|
14
|
+
* [新增] UI 支持向局域网开放(#9b37bcf)
|
|
15
|
+
|
|
16
|
+
框架:
|
|
17
|
+
* [新增] 新增目标截图间隔功能(#c8fbf80)
|
|
18
|
+
|
|
19
|
+
其他:
|
|
20
|
+
* [其他] 删除一些无用 Sprite 资源(#03aa2b5)
|
|
21
|
+
|
|
22
|
+
### v2025.7.5.0
|
|
23
|
+
脚本:
|
|
24
|
+
* [修复] 修复有几率无法识别到进行中培育的问题(#50d1403)
|
|
25
|
+
* [修复] 修复分辨率缩放导致无法识别到菜单按钮(#f2eadad)
|
|
26
|
+
* [修复] 修复分辨率缩放时无法检测到工作完成状态的问题(#d9077e7)
|
|
27
|
+
|
|
28
|
+
框架:
|
|
29
|
+
* [重构] 移除 Device.pinned 方法(#5306f5c)
|
|
30
|
+
|
|
4
31
|
### v2025.7.3.0
|
|
5
32
|
启动器:
|
|
6
33
|
* [新增] 新启动器现在支持安装指定版本与指定补丁(#456019b)
|
|
Binary file
|
kotonebot/kaa/resources/game.db
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|