ksaa 2025.7.20.0__py3-none-any.whl → 2025.7.27.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kotonebot/backend/bot.py +60 -12
- kotonebot/backend/context/task_action.py +9 -46
- kotonebot/backend/dispatch.py +1 -104
- kotonebot/backend/flow_controller.py +3 -1
- kotonebot/errors.py +37 -2
- kotonebot/interop/win/message_box.py +314 -0
- kotonebot/interop/win/task_dialog.py +469 -0
- kotonebot/kaa/config/produce.py +8 -6
- kotonebot/kaa/config/schema.py +2 -0
- kotonebot/kaa/errors.py +38 -0
- kotonebot/kaa/main/gr.py +22 -5
- kotonebot/kaa/metadata.py +18 -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/tasks/R.py +126 -126
- kotonebot/kaa/tasks/daily/contest.py +39 -8
- kotonebot/kaa/tasks/daily/purchase.py +0 -1
- kotonebot/kaa/tasks/end_game.py +4 -3
- kotonebot/kaa/tasks/produce/in_purodyuusu.py +30 -29
- kotonebot/kaa/tasks/produce/produce.py +2 -1
- kotonebot/kaa/tasks/start_game.py +2 -0
- kotonebot/ui/user.py +43 -13
- {ksaa-2025.7.20.0.dist-info → ksaa-2025.7.27.1.dist-info}/METADATA +2 -1
- {ksaa-2025.7.20.0.dist-info → ksaa-2025.7.27.1.dist-info}/RECORD +155 -152
- /kotonebot/kaa/sprites/{d56feb26-d560-423f-b5f8-dc06f7a3c8a1.png → 03821ecf-fdd2-4e89-8249-fc7288ac79be.png} +0 -0
- /kotonebot/kaa/sprites/{0554264f-0474-44d0-9209-8135d8840c53.png → 04c9d1c8-09b9-402d-b688-796253fdaf0c.png} +0 -0
- /kotonebot/kaa/sprites/{94021aa4-fb87-41e7-920a-988a360f8321.png → 05903cc9-9f7a-43ac-88e4-988a68311e05.png} +0 -0
- /kotonebot/kaa/sprites/{5aef61f9-d616-42f2-ae8d-5c5a033231d3.png → 093c3fb8-036e-4cf4-917b-d70cabebf571.png} +0 -0
- /kotonebot/kaa/sprites/{562f176f-af1e-4352-aeed-62e362177f9f.png → 0f986eac-1e3c-48ed-9850-cae529b30503.png} +0 -0
- /kotonebot/kaa/sprites/{e281792b-000b-4048-afb7-e8bb0dbd88b3.png → 116bf963-ad4a-401a-91f7-e3a56a4848b9.png} +0 -0
- /kotonebot/kaa/sprites/{9e0492b7-3b66-48a2-b589-91e7fd16106d.png → 14283368-d85d-458a-8f2c-b112bd02256e.png} +0 -0
- /kotonebot/kaa/sprites/{401966c8-2095-4eef-b92a-764122de02d9.png → 15ee94ce-1930-4eff-9ce2-0ebe947aaa05.png} +0 -0
- /kotonebot/kaa/sprites/{d54fc8f5-e50d-45dd-b123-92414f93488c.png → 1b2a0de3-34cc-42b2-8af3-bfeb8d0d679c.png} +0 -0
- /kotonebot/kaa/sprites/{b25627d6-3352-4fe8-93c2-b653efe104d4.png → 1c14e581-b664-488c-9d29-f5228ee6d328.png} +0 -0
- /kotonebot/kaa/sprites/{ddae5592-adc3-4c36-bfdd-6c6d91823296.png → 1d457687-ff10-41b0-95e1-6c1b3868b2a0.png} +0 -0
- /kotonebot/kaa/sprites/{0002785c-3caa-4c8f-8d47-f29aee04a588.png → 1f5f5454-eb1c-45c3-8467-80c224d528e6.png} +0 -0
- /kotonebot/kaa/sprites/{dd699396-5500-43ad-8470-cf7a8ba013ec.png → 252f1cd3-8e09-4b34-b5ba-47b1137a19c1.png} +0 -0
- /kotonebot/kaa/sprites/{fda67b44-d46d-4789-89a3-0786c60987ab.png → 2585cb7b-af94-46ac-a31d-f50bd09f40a6.png} +0 -0
- /kotonebot/kaa/sprites/{05a23a4a-9b93-4fbd-b4e9-15a7c4a91fdc.png → 28e5138d-bcd4-40d2-9e2f-0c845004b8ae.png} +0 -0
- /kotonebot/kaa/sprites/{c5774fb4-be11-4b28-8f58-299ae8872cc1.png → 29fc852e-4c61-416d-80ff-f28c5a64abc1.png} +0 -0
- /kotonebot/kaa/sprites/{9449ff36-7adb-42d5-b89d-bf9147d62811.png → 2a539cb4-827f-449b-9780-14a94678948b.png} +0 -0
- /kotonebot/kaa/sprites/{bcc433e0-8a4e-455f-b625-4583cea19c1c.png → 2c2ff5ed-3b1a-4dcc-89a9-9457908cb184.png} +0 -0
- /kotonebot/kaa/sprites/{fd77088d-652a-472e-9f84-dcc83d40a6bf.png → 2d902d81-5500-4265-9867-c5c4cac573d7.png} +0 -0
- /kotonebot/kaa/sprites/{9d80c1ef-0f42-4622-ab9a-bfcc077dace6.png → 31122061-ea7a-419e-8072-8552013a8255.png} +0 -0
- /kotonebot/kaa/sprites/{d14633f5-9682-4b59-a4ef-e92a2d26d86b.png → 31745cd7-226e-4e11-b96d-2e202a7097e7.png} +0 -0
- /kotonebot/kaa/sprites/{83f9e9a0-54dd-4601-8e54-3091c2892e67.png → 34dcd41c-b800-43b4-b24f-c569bae59db2.png} +0 -0
- /kotonebot/kaa/sprites/{d627ba81-9c86-4b53-9ab9-86c8748d8daa.png → 360bcb7f-c710-49d5-9942-2812ed03a447.png} +0 -0
- /kotonebot/kaa/sprites/{0aa4472c-b533-46cc-a072-9d165d955424.png → 36e02aa6-f858-4248-b39e-e16686d6baf1.png} +0 -0
- /kotonebot/kaa/sprites/{d83f2631-b9d8-4fd6-ab1c-50b0a013f3f0.png → 39882ba6-c9d9-4742-b92d-206781c5f60e.png} +0 -0
- /kotonebot/kaa/sprites/{0e29489c-6728-46cd-bd13-2b9d9e74b2da.png → 3ace2c73-cf00-4706-9aac-1a0229b1b3f5.png} +0 -0
- /kotonebot/kaa/sprites/{04feeecc-a607-402d-bbc4-a71af87c7fc2.png → 3bd19f01-57f8-4f8b-98b7-b5dd0779f77d.png} +0 -0
- /kotonebot/kaa/sprites/{a009c9de-029e-4999-b728-e6877374325a.png → 3cd5382a-a679-4f06-ab83-6328a943148d.png} +0 -0
- /kotonebot/kaa/sprites/{f16d6f1e-b9ff-4cff-aed3-dd150caf8f07.png → 3d7d1e3f-29c7-431d-8621-3f31b8880492.png} +0 -0
- /kotonebot/kaa/sprites/{681157d7-b37f-442f-b784-86fa9029ecdb.png → 3e558d01-1d7d-4ed3-9200-738252539dc1.png} +0 -0
- /kotonebot/kaa/sprites/{8a2938ad-5657-4f66-8447-4bc7fa45b857.png → 3ea31c2c-1421-421c-a7fa-7994c06e4bca.png} +0 -0
- /kotonebot/kaa/sprites/{39f88061-a997-4a8a-b09e-4a2425f4a83a.png → 432df4be-4970-4ac0-8465-a698bce6fe65.png} +0 -0
- /kotonebot/kaa/sprites/{4622e955-7bb1-450d-a776-01543540fde3.png → 464c3d3a-c772-4f85-94d5-970f46c8d213.png} +0 -0
- /kotonebot/kaa/sprites/{1609d037-a3fc-485b-96c6-cf1790434c01.png → 47f4b0a5-5792-4e82-b597-d58ea0b1f494.png} +0 -0
- /kotonebot/kaa/sprites/{143db8eb-fdde-4de0-a946-a14123b9262e.png → 4c444aaf-a2d1-44f1-aacc-b737f262a746.png} +0 -0
- /kotonebot/kaa/sprites/{9b696383-10dd-4a35-8546-1ccdb8891373.png → 4ced1b5f-bbd2-4230-8555-233d082f4d05.png} +0 -0
- /kotonebot/kaa/sprites/{7f4accdd-bd72-45e6-8469-692e27986486.png → 4de619fd-ed06-4210-b1f0-11556deb4dd9.png} +0 -0
- /kotonebot/kaa/sprites/{9a9d9398-15df-46ea-a247-04ba01f61603.png → 5033ca17-1327-4554-b939-968b8a78f10a.png} +0 -0
- /kotonebot/kaa/sprites/{bc01675d-453c-43f2-9075-f9567c8aa6f9.png → 52ae79ea-f4a4-4c19-9fe8-327f285ace1e.png} +0 -0
- /kotonebot/kaa/sprites/{71d6a37d-45df-456f-b673-d1e8b35ee619.png → 566e641a-a364-415c-a17b-2db7862f2714.png} +0 -0
- /kotonebot/kaa/sprites/{e89c23b0-ca58-49d1-b439-967a4a4a431d.png → 5a0d6f90-3758-4baa-94fc-a4a412284628.png} +0 -0
- /kotonebot/kaa/sprites/{b66e13a1-636c-4478-9d72-7d200ff670a9.png → 5ba7d61f-282d-4ad0-881a-842c26e7f66c.png} +0 -0
- /kotonebot/kaa/sprites/{3645c21a-acd8-4ec4-a286-d9031736342c.png → 5f3937f7-a5de-4a11-bcf9-da586596bf47.png} +0 -0
- /kotonebot/kaa/sprites/{6cacdb8f-2ea3-4e3c-a124-b957b75ea427.png → 60cfef80-cd08-4205-8088-8d0b22a59b5a.png} +0 -0
- /kotonebot/kaa/sprites/{49ccf947-13a5-4839-8f85-d0fe40094e77.png → 61f56d51-8d30-4aed-857a-8eff6fab27c1.png} +0 -0
- /kotonebot/kaa/sprites/{dcc214f3-9707-4a2c-aaff-3834e6f12f0b.png → 6468ab50-2d25-4b18-b555-2a56397968b0.png} +0 -0
- /kotonebot/kaa/sprites/{04425af8-ba28-407d-ad18-8c3a2483025d.png → 6597b7fd-3c5b-442f-a327-d18b555de544.png} +0 -0
- /kotonebot/kaa/sprites/{38c0ed08-5af3-4fca-a37f-27d66fd35a4c.png → 661d0e8d-379d-401d-9f29-147e70123adf.png} +0 -0
- /kotonebot/kaa/sprites/{f543861e-c3d5-4bc9-a677-47f9e86918ea.png → 66c7e6df-5c90-4b3a-9b51-78cff1357ed7.png} +0 -0
- /kotonebot/kaa/sprites/{0e4b4481-6805-4a1b-a3d8-913681968662.png → 6a033af8-222c-459a-9ab9-a9a69b27822d.png} +0 -0
- /kotonebot/kaa/sprites/{9dbc5d76-8c6a-4638-b0c2-eba79542ec58.png → 6c151fbe-7cf9-4629-b47a-da7be835bb4b.png} +0 -0
- /kotonebot/kaa/sprites/{6e59d072-06f8-488f-a453-8ba60a05d691.png → 6d225f8d-efc0-42a5-93af-7b81e24377c5.png} +0 -0
- /kotonebot/kaa/sprites/{e36ec591-8bf5-4deb-9f28-3977576de931.png → 749bd918-8dfb-4393-bf91-b39e285f1d75.png} +0 -0
- /kotonebot/kaa/sprites/{a3384f38-334c-440a-ab06-405bad293bab.png → 75cad2af-b8c5-4f5f-8398-acd90eb4348e.png} +0 -0
- /kotonebot/kaa/sprites/{966bcfd4-fefc-4704-907d-45bc6098d3f4.png → 76acc2b6-6649-4b1a-bd52-18ab9a2341d0.png} +0 -0
- /kotonebot/kaa/sprites/{2cff833f-10bd-478c-8760-99162c71e9e3.png → 7a8c4af3-2ac1-4295-b844-350ad00f2c50.png} +0 -0
- /kotonebot/kaa/sprites/{610ea09a-d623-428f-ac97-1b51dc5e9202.png → 7b552e56-0065-45d8-a0dc-bfe3be62b91f.png} +0 -0
- /kotonebot/kaa/sprites/{d6314592-b8a4-4025-9875-b135bf986cf7.png → 7c7cbe5a-37f0-4cf3-8376-4ceeb7a662b0.png} +0 -0
- /kotonebot/kaa/sprites/{20733b9b-1df7-42af-ab55-3364e8623602.png → 7dcc9134-9e5f-433b-ae5c-7530484f3f5f.png} +0 -0
- /kotonebot/kaa/sprites/{c3562fef-44f7-43d2-a4e6-e7ee21f8bdc5.png → 7dfdefa7-d95f-4348-9e0b-640ed17e138f.png} +0 -0
- /kotonebot/kaa/sprites/{a4553bb1-27b9-47c4-8f51-1cff2129df8e.png → 7e4a2554-c05b-458f-b31f-ac6930e8078e.png} +0 -0
- /kotonebot/kaa/sprites/{1bb92c94-af17-492e-9d22-393c12b7f346.png → 7e614cff-b492-4c4d-bbfe-0853ff65fcec.png} +0 -0
- /kotonebot/kaa/sprites/{87c7532f-2394-403e-a6d8-7a216043ec13.png → 7fcc8f4c-9d06-4747-8c1e-aaba3a61cc0e.png} +0 -0
- /kotonebot/kaa/sprites/{e075c8cb-7eef-47cf-b9fe-9e3d1bd98e85.png → 80c6d473-1eb2-4d65-8e8d-8f267ab61cd9.png} +0 -0
- /kotonebot/kaa/sprites/{40f04ad0-44c0-4913-89aa-bc466bfd6ace.png → 81fec353-ad18-4223-9ea3-8d128a4a3e77.png} +0 -0
- /kotonebot/kaa/sprites/{f0952cb2-dadb-4d9a-933e-cabcbf8850fb.png → 88e4e3c6-3f6b-4192-83c7-4b20a51ad53a.png} +0 -0
- /kotonebot/kaa/sprites/{79226566-26e2-4c2f-8f6a-4e4deb9fa9ea.png → 8938249c-94d3-4f20-8013-85d481a54d87.png} +0 -0
- /kotonebot/kaa/sprites/{1737a9e0-f8c4-416e-bbad-cb97a658ae9a.png → 8cbbfa8e-17aa-42e7-92f7-319a02c8f7fa.png} +0 -0
- /kotonebot/kaa/sprites/{8e0964c4-6e34-43cb-a333-d60bceae7f11.png → 8ed3eab8-779b-4b66-bc24-06b0b1dfac18.png} +0 -0
- /kotonebot/kaa/sprites/{3e34e821-ae69-49aa-9d04-bc34b3037cd5.png → 967b207a-79bb-479a-b50e-b2a04cf7ed54.png} +0 -0
- /kotonebot/kaa/sprites/{a514ce10-bff1-4aa0-9625-bf560dcb8be5.png → 96b12d02-c634-4e9c-a465-7ee61d5fc0bd.png} +0 -0
- /kotonebot/kaa/sprites/{2dab2877-c6c3-45d9-849f-fb2d79b7b74e.png → 9a0c8f11-33f0-4c53-a911-556f3481d952.png} +0 -0
- /kotonebot/kaa/sprites/{67f00dd1-86c9-4a49-a37c-87879171a46a.png → 9b439501-e57d-4912-9f57-67c4534060f7.png} +0 -0
- /kotonebot/kaa/sprites/{a77c1724-eb8f-4a1a-8997-516deb75ae78.png → 9f2a6935-f462-4726-b56e-8cf23aae3982.png} +0 -0
- /kotonebot/kaa/sprites/{b6f5243b-cfb4-42d2-b4eb-2fd1a9d33ab7.png → a148b768-8c8d-4fee-b29f-11d73240a3d0.png} +0 -0
- /kotonebot/kaa/sprites/{c577c19e-aa5d-4670-b44c-1c0b3d72451a.png → a1791427-52af-4d1e-8e95-e0533cb66d3c.png} +0 -0
- /kotonebot/kaa/sprites/{25f18ff9-dbae-4aed-87b4-c05ca6c4ebf4.png → a2d9b907-f68e-47c7-8aa6-31c07c272d94.png} +0 -0
- /kotonebot/kaa/sprites/{10a329df-2515-4551-a130-07e86058abdf.png → a3d5b052-526f-45ef-a2ed-5bba8ca9e4b1.png} +0 -0
- /kotonebot/kaa/sprites/{6ac4a3b5-66d2-4429-8cd1-945fbb48280c.png → a66625f6-f80c-48e4-a344-e48036085e2b.png} +0 -0
- /kotonebot/kaa/sprites/{1f9f101b-2647-4d14-931e-7a8307495475.png → a6bd2250-81b5-4f54-b6d9-bf9a5a4876d1.png} +0 -0
- /kotonebot/kaa/sprites/{a5d3efa4-ec3e-4637-835a-147af973bbf8.png → a7e31af5-a896-47bb-af4b-e71936ac6334.png} +0 -0
- /kotonebot/kaa/sprites/{64298c97-baac-48b9-be7d-cb14091aa3cb.png → aab26578-b548-41e5-8996-40ef821ca041.png} +0 -0
- /kotonebot/kaa/sprites/{9169bf8e-5907-42e5-b102-47da3bf9a0b1.png → ac0b1f47-ce60-479a-9c5d-d8ced42ec0e0.png} +0 -0
- /kotonebot/kaa/sprites/{12151e09-e5f1-4b1d-a211-63cb300cb082.png → acff3d83-f570-4c65-9bb3-db69cd525262.png} +0 -0
- /kotonebot/kaa/sprites/{88945ecf-9ac5-46dc-8af6-b21dbfded665.png → ad9cc197-c83d-4d39-b187-7105cde60ef5.png} +0 -0
- /kotonebot/kaa/sprites/{f2d8a534-8afd-475c-ac20-738c7efffc90.png → adc38fcc-84d2-4f7c-846d-4fe96dd5d08a.png} +0 -0
- /kotonebot/kaa/sprites/{10d9a788-24a2-42e1-9284-78f507986606.png → b5a58c56-3f09-47e5-ab61-57bab752e735.png} +0 -0
- /kotonebot/kaa/sprites/{3e613561-8dbd-4094-9889-53f08541a716.png → b92c4308-3778-47aa-8a0b-222d32721beb.png} +0 -0
- /kotonebot/kaa/sprites/{cab0b1ff-b40a-42a8-b799-75e309b2dee3.png → bba3cd68-3023-4a7b-9fe9-36ec7adbfc89.png} +0 -0
- /kotonebot/kaa/sprites/{f217d7cf-acf5-44eb-9f99-025bbcaea866.png → bd04472b-eeeb-4ad7-b385-8347b7053887.png} +0 -0
- /kotonebot/kaa/sprites/{8fb17c7f-778d-4cd5-8d2f-dbf21d264297.png → c157661d-de06-4e34-bc3b-7d79c987e26d.png} +0 -0
- /kotonebot/kaa/sprites/{89d3c0a6-266e-486e-998d-ecd0d2536814.png → c2e3d6ac-00b6-4d2a-a30b-52a1190f5f05.png} +0 -0
- /kotonebot/kaa/sprites/{df9d09c3-8f15-4caf-bb21-f69644fb4705.png → c370b930-9750-4782-9564-5ce4cd609bdd.png} +0 -0
- /kotonebot/kaa/sprites/{12d0271c-1a86-4d2c-b379-b7df847fe20b.png → c84eada8-ff68-4d73-802b-6de88e73ec6d.png} +0 -0
- /kotonebot/kaa/sprites/{97a543a8-a859-4a1e-8e33-602f600db389.png → c8f444cc-e809-44c2-86a3-3cbb5bcd0356.png} +0 -0
- /kotonebot/kaa/sprites/{41f0e90a-a352-450c-a788-0303d038227a.png → d0881e29-6da6-4823-b65c-eefa9f9f2208.png} +0 -0
- /kotonebot/kaa/sprites/{fef40be1-5b75-4023-9977-df46cd211a86.png → d0ad5222-0ee0-412e-819f-3217f9fd854b.png} +0 -0
- /kotonebot/kaa/sprites/{e04331fe-d62e-4f77-953d-78515ee5686e.png → d32f8851-4fd2-4484-8ae8-66a375a43f3d.png} +0 -0
- /kotonebot/kaa/sprites/{5d3b3a20-89bb-4cf2-9973-25581c32e91c.png → d5a9d7f7-a065-4ff3-ae4c-b027f348ef54.png} +0 -0
- /kotonebot/kaa/sprites/{b169172d-8ce2-432a-bed6-1dfc30bcc95c.png → d6235144-ce78-4884-88b4-d1a12b76155f.png} +0 -0
- /kotonebot/kaa/sprites/{0a4c6cbe-f42e-4301-9c1a-101fc33421d2.png → d77a936b-c0ae-4dbd-8b44-82288a0957d6.png} +0 -0
- /kotonebot/kaa/sprites/{15fe6944-396c-467b-80db-476bbdf65a80.png → d94ce829-a7ab-44aa-bc0c-a4801b650088.png} +0 -0
- /kotonebot/kaa/sprites/{92a42da1-d8d2-4233-b6d0-5997a72f3d03.png → dc64e856-2f31-48b1-b17d-32b499f819ce.png} +0 -0
- /kotonebot/kaa/sprites/{3fc47270-febf-492e-b8fc-0a9793bc0d56.png → dd5ffd48-2ab0-4795-8193-8a8310101574.png} +0 -0
- /kotonebot/kaa/sprites/{6582463d-b4fa-40a1-b771-664c7f71fe9c.png → ddc8f913-e9ae-46dc-a91a-d3ee79e9f32d.png} +0 -0
- /kotonebot/kaa/sprites/{1aed664e-ceb3-4a1d-a338-df08dc8ebbd3.png → e049018e-9d2b-4537-add1-e902cf8ac69a.png} +0 -0
- /kotonebot/kaa/sprites/{2cea06ca-99f6-4bc5-8dd0-2bba80b07b17.png → e25468f5-929a-4a49-a2e0-4527075353b5.png} +0 -0
- /kotonebot/kaa/sprites/{32907971-0e98-4adc-91b8-ac0308c11c3c.png → e54b7482-a348-4252-a373-2ee69b3805b5.png} +0 -0
- /kotonebot/kaa/sprites/{f58c3a84-60ea-415b-ac63-4b534dc8cb6c.png → e62afa2c-1c5b-426e-8ff1-ea51f75d0f20.png} +0 -0
- /kotonebot/kaa/sprites/{731ed76d-6d6c-48b9-82c3-045cc1ecc419.png → e7a0ea00-2a72-4d74-8664-53726e3e1078.png} +0 -0
- /kotonebot/kaa/sprites/{487ae483-2787-4982-93b0-4847665683e9.png → eb67d908-13f8-4cef-9a86-9770e342ab77.png} +0 -0
- /kotonebot/kaa/sprites/{3a595ec9-d813-4c09-b8b8-be8f5da88faa.png → ebb662bb-62b4-404c-bb8f-4a7d5feccaa8.png} +0 -0
- /kotonebot/kaa/sprites/{c92a2935-cf41-4f56-911a-bc40f122cbf3.png → ee8a6029-63b3-4c13-bdc5-9bd8546d3316.png} +0 -0
- /kotonebot/kaa/sprites/{d81b7022-5c81-4533-b949-7e9d75a5b8b4.png → eea2af85-94b2-4c41-8f51-393059dcc43c.png} +0 -0
- /kotonebot/kaa/sprites/{f5727018-9a23-40de-840e-610d6e5dfa9d.png → eec4d7d6-3084-4bab-99c1-10e3a9459393.png} +0 -0
- /kotonebot/kaa/sprites/{be83e205-8ec5-452f-b42b-b98156516aa8.png → efb31647-3760-4b76-8b5d-ec4b5fb7a975.png} +0 -0
- /kotonebot/kaa/sprites/{951ae4be-40f3-4ccc-8578-77aca7f25eef.png → f03739ee-31e1-40ca-9aaf-6c0447d426a4.png} +0 -0
- /kotonebot/kaa/sprites/{9dfa46c9-54ec-4dd7-8f2e-e1e66c1206f1.png → f08044bf-8a33-4d6b-8791-94470678efa6.png} +0 -0
- /kotonebot/kaa/sprites/{183df82f-acea-4d40-87a8-18fc8ddab6d0.png → f23cb531-18b5-4852-bb11-56dc621e56cc.png} +0 -0
- /kotonebot/kaa/sprites/{377857a9-c37f-4a90-afa9-00c4ff7b24ae.png → f7a4208f-0373-4f26-907f-84c3f2b810fc.png} +0 -0
- /kotonebot/kaa/sprites/{2bb9dbf7-6cb2-426a-a35c-7228a1320220.png → f88f9f3b-e0e7-498c-ad1c-e92a719164f3.png} +0 -0
- /kotonebot/kaa/sprites/{70671b9e-9ebb-4dee-bc5a-dbcb70364adf.png → f93c7a24-157d-43ef-adcc-3873d313c6d7.png} +0 -0
- /kotonebot/kaa/sprites/{63cd694d-343e-468d-a53f-360c97f71ee6.png → f957fbb8-ba30-47c0-97b8-ff531d6e3831.png} +0 -0
- /kotonebot/kaa/sprites/{dcc2da94-2c9d-4248-bce5-731651e391ae.png → fbbf4921-ece5-4dc0-875d-8f7182596d4f.png} +0 -0
- /kotonebot/kaa/sprites/{131fb7e1-6eb9-4722-9943-76ff05c5baee.png → ff361c63-3f3d-48df-a26f-7698bd459219.png} +0 -0
- /kotonebot/kaa/sprites/{e4a92c92-0974-40e0-b488-16ea7a4c1a29.png → ff5a0417-229f-41bd-8121-708b08417114.png} +0 -0
- {ksaa-2025.7.20.0.dist-info → ksaa-2025.7.27.1.dist-info}/WHEEL +0 -0
- {ksaa-2025.7.20.0.dist-info → ksaa-2025.7.27.1.dist-info}/entry_points.txt +0 -0
- {ksaa-2025.7.20.0.dist-info → ksaa-2025.7.27.1.dist-info}/licenses/LICENSE +0 -0
- {ksaa-2025.7.20.0.dist-info → ksaa-2025.7.27.1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import ctypes
|
|
2
|
+
from typing import Optional, Literal, List, overload
|
|
3
|
+
from typing_extensions import assert_never
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# 按钮常量
|
|
7
|
+
MB_OK = 0x00000000
|
|
8
|
+
MB_OKCANCEL = 0x00000001
|
|
9
|
+
MB_ABORTRETRYIGNORE = 0x00000002
|
|
10
|
+
MB_YESNOCANCEL = 0x00000003
|
|
11
|
+
MB_YESNO = 0x00000004
|
|
12
|
+
MB_RETRYCANCEL = 0x00000005
|
|
13
|
+
MB_CANCELTRYCONTINUE = 0x00000006
|
|
14
|
+
|
|
15
|
+
# 图标常量
|
|
16
|
+
MB_ICONSTOP = 0x00000010
|
|
17
|
+
MB_ICONERROR = 0x00000010
|
|
18
|
+
MB_ICONQUESTION = 0x00000020
|
|
19
|
+
MB_ICONWARNING = 0x00000030
|
|
20
|
+
MB_ICONINFORMATION = 0x00000040
|
|
21
|
+
|
|
22
|
+
# 默认按钮常量
|
|
23
|
+
MB_DEFBUTTON1 = 0x00000000
|
|
24
|
+
MB_DEFBUTTON2 = 0x00000100
|
|
25
|
+
MB_DEFBUTTON3 = 0x00000200
|
|
26
|
+
MB_DEFBUTTON4 = 0x00000300
|
|
27
|
+
|
|
28
|
+
# 模态常量
|
|
29
|
+
MB_APPLMODAL = 0x00000000
|
|
30
|
+
MB_SYSTEMMODAL = 0x00001000
|
|
31
|
+
MB_TASKMODAL = 0x00002000
|
|
32
|
+
|
|
33
|
+
# 其他选项
|
|
34
|
+
MB_HELP = 0x00004000
|
|
35
|
+
MB_NOFOCUS = 0x00008000
|
|
36
|
+
MB_SETFOREGROUND = 0x00010000
|
|
37
|
+
MB_DEFAULT_DESKTOP_ONLY = 0x00020000
|
|
38
|
+
MB_TOPMOST = 0x00040000
|
|
39
|
+
MB_RIGHT = 0x00080000
|
|
40
|
+
MB_RTLREADING = 0x00100000
|
|
41
|
+
MB_SERVICE_NOTIFICATION = 0x00200000
|
|
42
|
+
|
|
43
|
+
# 返回值常量
|
|
44
|
+
IDOK = 1
|
|
45
|
+
IDCANCEL = 2
|
|
46
|
+
IDABORT = 3
|
|
47
|
+
IDRETRY = 4
|
|
48
|
+
IDIGNORE = 5
|
|
49
|
+
IDYES = 6
|
|
50
|
+
IDNO = 7
|
|
51
|
+
IDCLOSE = 8
|
|
52
|
+
IDHELP = 9
|
|
53
|
+
IDTRYAGAIN = 10
|
|
54
|
+
IDCONTINUE = 11
|
|
55
|
+
|
|
56
|
+
# 为清晰起见,定义类型别名
|
|
57
|
+
ButtonsType = Literal['ok', 'ok_cancel', 'abort_retry_ignore', 'yes_no_cancel', 'yes_no', 'retry_cancel', 'cancel_try_continue']
|
|
58
|
+
IconType = Optional[Literal['stop', 'error', 'question', 'warning', 'information']]
|
|
59
|
+
DefaultButtonType = Literal['button1', 'button2', 'button3', 'button4']
|
|
60
|
+
ModalType = Literal['application', 'system', 'task']
|
|
61
|
+
OptionsType = Optional[List[Literal['help', 'no_focus', 'set_foreground', 'default_desktop_only', 'topmost', 'right', 'rtl_reading', 'service_notification']]]
|
|
62
|
+
ReturnType = Literal['ok', 'cancel', 'abort', 'retry', 'ignore', 'yes', 'no', 'close', 'help', 'try_again', 'continue']
|
|
63
|
+
|
|
64
|
+
user32 = ctypes.windll.user32
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@overload
|
|
68
|
+
def message_box(
|
|
69
|
+
hWnd: Optional[int],
|
|
70
|
+
text: str,
|
|
71
|
+
caption: str,
|
|
72
|
+
buttons: Literal['ok'] = 'ok',
|
|
73
|
+
icon: IconType = None,
|
|
74
|
+
default_button: DefaultButtonType = 'button1',
|
|
75
|
+
modal: ModalType = 'application',
|
|
76
|
+
options: OptionsType = None
|
|
77
|
+
) -> Literal['ok']: ...
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
@overload
|
|
81
|
+
def message_box(
|
|
82
|
+
hWnd: Optional[int],
|
|
83
|
+
text: str,
|
|
84
|
+
caption: str,
|
|
85
|
+
buttons: Literal['ok_cancel'],
|
|
86
|
+
icon: IconType = None,
|
|
87
|
+
default_button: DefaultButtonType = 'button1',
|
|
88
|
+
modal: ModalType = 'application',
|
|
89
|
+
options: OptionsType = None
|
|
90
|
+
) -> Literal['ok', 'cancel']: ...
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
@overload
|
|
94
|
+
def message_box(
|
|
95
|
+
hWnd: Optional[int],
|
|
96
|
+
text: str,
|
|
97
|
+
caption: str,
|
|
98
|
+
buttons: Literal['abort_retry_ignore'],
|
|
99
|
+
icon: IconType = None,
|
|
100
|
+
default_button: DefaultButtonType = 'button1',
|
|
101
|
+
modal: ModalType = 'application',
|
|
102
|
+
options: OptionsType = None
|
|
103
|
+
) -> Literal['abort', 'retry', 'ignore']: ...
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
@overload
|
|
107
|
+
def message_box(
|
|
108
|
+
hWnd: Optional[int],
|
|
109
|
+
text: str,
|
|
110
|
+
caption: str,
|
|
111
|
+
buttons: Literal['yes_no_cancel'],
|
|
112
|
+
icon: IconType = None,
|
|
113
|
+
default_button: DefaultButtonType = 'button1',
|
|
114
|
+
modal: ModalType = 'application',
|
|
115
|
+
options: OptionsType = None
|
|
116
|
+
) -> Literal['yes', 'no', 'cancel']: ...
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
@overload
|
|
120
|
+
def message_box(
|
|
121
|
+
hWnd: Optional[int],
|
|
122
|
+
text: str,
|
|
123
|
+
caption: str,
|
|
124
|
+
buttons: Literal['yes_no'],
|
|
125
|
+
icon: IconType = None,
|
|
126
|
+
default_button: DefaultButtonType = 'button1',
|
|
127
|
+
modal: ModalType = 'application',
|
|
128
|
+
options: OptionsType = None
|
|
129
|
+
) -> Literal['yes', 'no']: ...
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
@overload
|
|
133
|
+
def message_box(
|
|
134
|
+
hWnd: Optional[int],
|
|
135
|
+
text: str,
|
|
136
|
+
caption: str,
|
|
137
|
+
buttons: Literal['retry_cancel'],
|
|
138
|
+
icon: IconType = None,
|
|
139
|
+
default_button: DefaultButtonType = 'button1',
|
|
140
|
+
modal: ModalType = 'application',
|
|
141
|
+
options: OptionsType = None
|
|
142
|
+
) -> Literal['retry', 'cancel']: ...
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
@overload
|
|
146
|
+
def message_box(
|
|
147
|
+
hWnd: Optional[int],
|
|
148
|
+
text: str,
|
|
149
|
+
caption: str,
|
|
150
|
+
buttons: Literal['cancel_try_continue'],
|
|
151
|
+
icon: IconType = None,
|
|
152
|
+
default_button: DefaultButtonType = 'button1',
|
|
153
|
+
modal: ModalType = 'application',
|
|
154
|
+
options: OptionsType = None
|
|
155
|
+
) -> Literal['cancel', 'try_again', 'continue']: ...
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def message_box(
|
|
159
|
+
hWnd: Optional[int],
|
|
160
|
+
text: str,
|
|
161
|
+
caption: str,
|
|
162
|
+
buttons: ButtonsType = 'ok',
|
|
163
|
+
icon: IconType = None,
|
|
164
|
+
default_button: DefaultButtonType = 'button1',
|
|
165
|
+
modal: ModalType = 'application',
|
|
166
|
+
options: OptionsType = None
|
|
167
|
+
) -> ReturnType:
|
|
168
|
+
"""
|
|
169
|
+
显示消息框。
|
|
170
|
+
|
|
171
|
+
:param hWnd: 所属窗口的句柄。可以为 None。
|
|
172
|
+
:param text: 要显示的消息。
|
|
173
|
+
:param caption: 消息框的标题。
|
|
174
|
+
:param buttons: 要显示的按钮。
|
|
175
|
+
:param icon: 要显示的图标。
|
|
176
|
+
:param default_button: 默认按钮。
|
|
177
|
+
:param modal: 消息框的模态。
|
|
178
|
+
:param options: 其他杂项选项列表。
|
|
179
|
+
:return: 表示用户点击的按钮的字符串。
|
|
180
|
+
"""
|
|
181
|
+
uType = 0
|
|
182
|
+
|
|
183
|
+
# --- 按钮类型 ---
|
|
184
|
+
match buttons:
|
|
185
|
+
case 'ok':
|
|
186
|
+
uType |= MB_OK
|
|
187
|
+
case 'ok_cancel':
|
|
188
|
+
uType |= MB_OKCANCEL
|
|
189
|
+
case 'abort_retry_ignore':
|
|
190
|
+
uType |= MB_ABORTRETRYIGNORE
|
|
191
|
+
case 'yes_no_cancel':
|
|
192
|
+
uType |= MB_YESNOCANCEL
|
|
193
|
+
case 'yes_no':
|
|
194
|
+
uType |= MB_YESNO
|
|
195
|
+
case 'retry_cancel':
|
|
196
|
+
uType |= MB_RETRYCANCEL
|
|
197
|
+
case 'cancel_try_continue':
|
|
198
|
+
uType |= MB_CANCELTRYCONTINUE
|
|
199
|
+
case _:
|
|
200
|
+
assert_never(buttons)
|
|
201
|
+
|
|
202
|
+
# --- 图标类型 ---
|
|
203
|
+
if icon:
|
|
204
|
+
match icon:
|
|
205
|
+
case 'stop' | 'error':
|
|
206
|
+
uType |= MB_ICONSTOP
|
|
207
|
+
case 'question':
|
|
208
|
+
uType |= MB_ICONQUESTION
|
|
209
|
+
case 'warning':
|
|
210
|
+
uType |= MB_ICONWARNING
|
|
211
|
+
case 'information':
|
|
212
|
+
uType |= MB_ICONINFORMATION
|
|
213
|
+
case _:
|
|
214
|
+
assert_never(icon)
|
|
215
|
+
|
|
216
|
+
# --- 默认按钮 ---
|
|
217
|
+
match default_button:
|
|
218
|
+
case 'button1':
|
|
219
|
+
uType |= MB_DEFBUTTON1
|
|
220
|
+
case 'button2':
|
|
221
|
+
uType |= MB_DEFBUTTON2
|
|
222
|
+
case 'button3':
|
|
223
|
+
uType |= MB_DEFBUTTON3
|
|
224
|
+
case 'button4':
|
|
225
|
+
uType |= MB_DEFBUTTON4
|
|
226
|
+
case _:
|
|
227
|
+
assert_never(default_button)
|
|
228
|
+
|
|
229
|
+
# --- 模态 ---
|
|
230
|
+
match modal:
|
|
231
|
+
case 'application':
|
|
232
|
+
uType |= MB_APPLMODAL
|
|
233
|
+
case 'system':
|
|
234
|
+
uType |= MB_SYSTEMMODAL
|
|
235
|
+
case 'task':
|
|
236
|
+
uType |= MB_TASKMODAL
|
|
237
|
+
case _:
|
|
238
|
+
assert_never(modal)
|
|
239
|
+
|
|
240
|
+
# --- 其他选项 ---
|
|
241
|
+
if options:
|
|
242
|
+
for option in options:
|
|
243
|
+
match option:
|
|
244
|
+
case 'help':
|
|
245
|
+
uType |= MB_HELP
|
|
246
|
+
case 'no_focus':
|
|
247
|
+
uType |= MB_NOFOCUS
|
|
248
|
+
case 'set_foreground':
|
|
249
|
+
uType |= MB_SETFOREGROUND
|
|
250
|
+
case 'default_desktop_only':
|
|
251
|
+
uType |= MB_DEFAULT_DESKTOP_ONLY
|
|
252
|
+
case 'topmost':
|
|
253
|
+
uType |= MB_TOPMOST
|
|
254
|
+
case 'right':
|
|
255
|
+
uType |= MB_RIGHT
|
|
256
|
+
case 'rtl_reading':
|
|
257
|
+
uType |= MB_RTLREADING
|
|
258
|
+
case 'service_notification':
|
|
259
|
+
uType |= MB_SERVICE_NOTIFICATION
|
|
260
|
+
case _:
|
|
261
|
+
assert_never(option)
|
|
262
|
+
|
|
263
|
+
result = user32.MessageBoxW(hWnd, text, caption, uType)
|
|
264
|
+
|
|
265
|
+
match result:
|
|
266
|
+
case 1: # IDOK
|
|
267
|
+
return 'ok'
|
|
268
|
+
case 2: # IDCANCEL
|
|
269
|
+
return 'cancel'
|
|
270
|
+
case 3: # IDABORT
|
|
271
|
+
return 'abort'
|
|
272
|
+
case 4: # IDRETRY
|
|
273
|
+
return 'retry'
|
|
274
|
+
case 5: # IDIGNORE
|
|
275
|
+
return 'ignore'
|
|
276
|
+
case 6: # IDYES
|
|
277
|
+
return 'yes'
|
|
278
|
+
case 7: # IDNO
|
|
279
|
+
return 'no'
|
|
280
|
+
case 8: # IDCLOSE
|
|
281
|
+
return 'close'
|
|
282
|
+
case 9: # IDHELP
|
|
283
|
+
return 'help'
|
|
284
|
+
case 10: # IDTRYAGAIN
|
|
285
|
+
return 'try_again'
|
|
286
|
+
case 11: # IDCONTINUE
|
|
287
|
+
return 'continue'
|
|
288
|
+
case _:
|
|
289
|
+
# 对于标准消息框,不应发生这种情况
|
|
290
|
+
raise RuntimeError(f"Unknown MessageBox return code: {result}")
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
if __name__ == '__main__':
|
|
294
|
+
# 示例用法
|
|
295
|
+
response = message_box(
|
|
296
|
+
None,
|
|
297
|
+
"是否要退出程序?",
|
|
298
|
+
"确认",
|
|
299
|
+
buttons='yes_no',
|
|
300
|
+
icon='question'
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
if response == 'yes':
|
|
304
|
+
print("程序退出。")
|
|
305
|
+
else:
|
|
306
|
+
print("程序继续运行。")
|
|
307
|
+
|
|
308
|
+
message_box(
|
|
309
|
+
None,
|
|
310
|
+
"操作已完成。",
|
|
311
|
+
"通知",
|
|
312
|
+
buttons='ok',
|
|
313
|
+
icon='information'
|
|
314
|
+
)
|