ksaa 2025.7.20.0__py3-none-any.whl → 2025.7.27.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 +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 +14 -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 +32 -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.0.dist-info}/METADATA +2 -1
- {ksaa-2025.7.20.0.dist-info → ksaa-2025.7.27.0.dist-info}/RECORD +155 -152
- /kotonebot/kaa/sprites/{70671b9e-9ebb-4dee-bc5a-dbcb70364adf.png → 039771df-9741-4f4e-9793-9017386ac68e.png} +0 -0
- /kotonebot/kaa/sprites/{32907971-0e98-4adc-91b8-ac0308c11c3c.png → 0c826d2e-41ce-474b-ad99-f4561baf03de.png} +0 -0
- /kotonebot/kaa/sprites/{89d3c0a6-266e-486e-998d-ecd0d2536814.png → 0fb240b0-1bb5-4aee-8ad3-a24062ee9a20.png} +0 -0
- /kotonebot/kaa/sprites/{20733b9b-1df7-42af-ab55-3364e8623602.png → 10636534-51ee-4698-b582-e56751bebb4d.png} +0 -0
- /kotonebot/kaa/sprites/{562f176f-af1e-4352-aeed-62e362177f9f.png → 1218bb7e-2cab-477e-aa51-f71aa4f52a7d.png} +0 -0
- /kotonebot/kaa/sprites/{b66e13a1-636c-4478-9d72-7d200ff670a9.png → 1917a430-d216-4359-8f62-0b62108f58c1.png} +0 -0
- /kotonebot/kaa/sprites/{39f88061-a997-4a8a-b09e-4a2425f4a83a.png → 1f56fbc1-47f5-4dc3-b91b-6e49e4ea00dc.png} +0 -0
- /kotonebot/kaa/sprites/{3e613561-8dbd-4094-9889-53f08541a716.png → 25797538-2dc6-436c-b64a-597ae6d5db6e.png} +0 -0
- /kotonebot/kaa/sprites/{38c0ed08-5af3-4fca-a37f-27d66fd35a4c.png → 27d59ead-0f94-4554-8c9a-cd3aeb606fea.png} +0 -0
- /kotonebot/kaa/sprites/{cab0b1ff-b40a-42a8-b799-75e309b2dee3.png → 2822bf2b-b350-437b-b330-0e8c122bfbe7.png} +0 -0
- /kotonebot/kaa/sprites/{9169bf8e-5907-42e5-b102-47da3bf9a0b1.png → 287ec12a-c1fb-4b8f-a77c-acc99821eabd.png} +0 -0
- /kotonebot/kaa/sprites/{131fb7e1-6eb9-4722-9943-76ff05c5baee.png → 290aaff5-71eb-4d71-87db-3757d3e9794b.png} +0 -0
- /kotonebot/kaa/sprites/{1737a9e0-f8c4-416e-bbad-cb97a658ae9a.png → 29fcf4cb-883f-475e-a68f-107cffc83f1c.png} +0 -0
- /kotonebot/kaa/sprites/{6ac4a3b5-66d2-4429-8cd1-945fbb48280c.png → 2ac90dcf-2284-437e-a61e-51934f937f8f.png} +0 -0
- /kotonebot/kaa/sprites/{05a23a4a-9b93-4fbd-b4e9-15a7c4a91fdc.png → 2e3410a1-49b5-4f65-8f26-bb1df213c2b8.png} +0 -0
- /kotonebot/kaa/sprites/{9b696383-10dd-4a35-8546-1ccdb8891373.png → 30bc31e4-40b3-4bcb-bb36-1dd5a8c59a32.png} +0 -0
- /kotonebot/kaa/sprites/{9dbc5d76-8c6a-4638-b0c2-eba79542ec58.png → 34eaf943-a8b5-4358-aadc-62ff656ab542.png} +0 -0
- /kotonebot/kaa/sprites/{0aa4472c-b533-46cc-a072-9d165d955424.png → 37f1d878-467f-4ba0-bc59-bb327797191b.png} +0 -0
- /kotonebot/kaa/sprites/{1aed664e-ceb3-4a1d-a338-df08dc8ebbd3.png → 3aa13898-1a50-4234-b9ec-f35878f05592.png} +0 -0
- /kotonebot/kaa/sprites/{0e29489c-6728-46cd-bd13-2b9d9e74b2da.png → 3ca43ccf-8748-439f-80f7-a95978a6b1f2.png} +0 -0
- /kotonebot/kaa/sprites/{dcc2da94-2c9d-4248-bce5-731651e391ae.png → 3efe8341-33bc-492e-8a0f-69a507502b43.png} +0 -0
- /kotonebot/kaa/sprites/{b169172d-8ce2-432a-bed6-1dfc30bcc95c.png → 3f6b5de5-c942-4ef1-8b04-5ee6859bb27b.png} +0 -0
- /kotonebot/kaa/sprites/{f0952cb2-dadb-4d9a-933e-cabcbf8850fb.png → 432aad91-9cc5-4518-bbfd-6cbed522dac6.png} +0 -0
- /kotonebot/kaa/sprites/{c577c19e-aa5d-4670-b44c-1c0b3d72451a.png → 452e213a-9762-42ec-8e2b-2cabc3eb254d.png} +0 -0
- /kotonebot/kaa/sprites/{79226566-26e2-4c2f-8f6a-4e4deb9fa9ea.png → 46a8bf3e-7149-4d9b-8b31-a6b9c3d6b166.png} +0 -0
- /kotonebot/kaa/sprites/{fd77088d-652a-472e-9f84-dcc83d40a6bf.png → 48293a53-d05b-4198-995f-103531f26923.png} +0 -0
- /kotonebot/kaa/sprites/{7f4accdd-bd72-45e6-8469-692e27986486.png → 4c0dc941-6ecf-45b4-91f8-3fb10e770512.png} +0 -0
- /kotonebot/kaa/sprites/{2cea06ca-99f6-4bc5-8dd0-2bba80b07b17.png → 50986ada-ff64-405f-911d-f6c3655fb658.png} +0 -0
- /kotonebot/kaa/sprites/{10a329df-2515-4551-a130-07e86058abdf.png → 535db21f-b22e-4a05-a7e8-81e3664305b8.png} +0 -0
- /kotonebot/kaa/sprites/{1609d037-a3fc-485b-96c6-cf1790434c01.png → 5410568f-2e3c-49b2-8112-f43c52342298.png} +0 -0
- /kotonebot/kaa/sprites/{d627ba81-9c86-4b53-9ab9-86c8748d8daa.png → 5aa47ea4-79de-4547-9320-cf8c614c7366.png} +0 -0
- /kotonebot/kaa/sprites/{a77c1724-eb8f-4a1a-8997-516deb75ae78.png → 5d1627a0-f803-4736-8c3c-7bf1f0de0aa0.png} +0 -0
- /kotonebot/kaa/sprites/{88945ecf-9ac5-46dc-8af6-b21dbfded665.png → 5eaa9fa9-0bce-47ce-8f28-d5ba32c566c3.png} +0 -0
- /kotonebot/kaa/sprites/{63cd694d-343e-468d-a53f-360c97f71ee6.png → 650eee06-c926-4e91-bd2c-38f3068938c0.png} +0 -0
- /kotonebot/kaa/sprites/{5aef61f9-d616-42f2-ae8d-5c5a033231d3.png → 652c9b9f-316e-46b2-a2d4-8dc8d5e6116f.png} +0 -0
- /kotonebot/kaa/sprites/{d83f2631-b9d8-4fd6-ab1c-50b0a013f3f0.png → 6621d884-5ba5-4356-bd50-94239ec5395a.png} +0 -0
- /kotonebot/kaa/sprites/{dcc214f3-9707-4a2c-aaff-3834e6f12f0b.png → 66de3573-9562-4cd8-82df-5d6be6b1f213.png} +0 -0
- /kotonebot/kaa/sprites/{a5d3efa4-ec3e-4637-835a-147af973bbf8.png → 6b71968e-97d3-4fad-89d0-ffb7743446a9.png} +0 -0
- /kotonebot/kaa/sprites/{f16d6f1e-b9ff-4cff-aed3-dd150caf8f07.png → 6c7cb85e-0aac-40d8-9b55-d9b455c89985.png} +0 -0
- /kotonebot/kaa/sprites/{1bb92c94-af17-492e-9d22-393c12b7f346.png → 6cba0d0c-a67b-470d-9abe-1c55b14310ba.png} +0 -0
- /kotonebot/kaa/sprites/{731ed76d-6d6c-48b9-82c3-045cc1ecc419.png → 6d59fa9e-b988-47e3-99b5-e06510f98e45.png} +0 -0
- /kotonebot/kaa/sprites/{04425af8-ba28-407d-ad18-8c3a2483025d.png → 6eb8e6a5-b361-4c4f-b161-e2ccd5ef277d.png} +0 -0
- /kotonebot/kaa/sprites/{e36ec591-8bf5-4deb-9f28-3977576de931.png → 6ed77f5b-e4ce-4722-934e-3c5ec34b6d5a.png} +0 -0
- /kotonebot/kaa/sprites/{8e0964c4-6e34-43cb-a333-d60bceae7f11.png → 6f4d32df-2a01-40e8-bfd1-9e83c6864789.png} +0 -0
- /kotonebot/kaa/sprites/{41f0e90a-a352-450c-a788-0303d038227a.png → 6f56551e-bfa3-4efe-b95a-411e54885ceb.png} +0 -0
- /kotonebot/kaa/sprites/{d54fc8f5-e50d-45dd-b123-92414f93488c.png → 725d6877-7260-4ca3-91d3-da4e9ccbf206.png} +0 -0
- /kotonebot/kaa/sprites/{d14633f5-9682-4b59-a4ef-e92a2d26d86b.png → 74bb6050-8d6d-48aa-8e71-31e92304b5af.png} +0 -0
- /kotonebot/kaa/sprites/{a009c9de-029e-4999-b728-e6877374325a.png → 760655f5-1d32-437c-81fc-306e80fabfd8.png} +0 -0
- /kotonebot/kaa/sprites/{487ae483-2787-4982-93b0-4847665683e9.png → 763968fd-f7ab-4a46-a0ef-6a496b21d3dd.png} +0 -0
- /kotonebot/kaa/sprites/{0e4b4481-6805-4a1b-a3d8-913681968662.png → 77b7b404-bc0c-4637-96b0-7344f782989e.png} +0 -0
- /kotonebot/kaa/sprites/{fef40be1-5b75-4023-9977-df46cd211a86.png → 79cddeac-828b-49a1-b860-b422e2c8d2ea.png} +0 -0
- /kotonebot/kaa/sprites/{3645c21a-acd8-4ec4-a286-d9031736342c.png → 7b74cacf-b8b4-4915-a71a-1dab321dab60.png} +0 -0
- /kotonebot/kaa/sprites/{c92a2935-cf41-4f56-911a-bc40f122cbf3.png → 7d931bd2-5cfc-4e4c-83c0-498b5e17d15c.png} +0 -0
- /kotonebot/kaa/sprites/{2bb9dbf7-6cb2-426a-a35c-7228a1320220.png → 7dc4ea14-42a9-4b2f-a164-99da3dbb000b.png} +0 -0
- /kotonebot/kaa/sprites/{df9d09c3-8f15-4caf-bb21-f69644fb4705.png → 7dc5f386-2db3-4405-9796-34f1b8a6755f.png} +0 -0
- /kotonebot/kaa/sprites/{40f04ad0-44c0-4913-89aa-bc466bfd6ace.png → 843174a9-6cff-45ba-9573-67904691a30f.png} +0 -0
- /kotonebot/kaa/sprites/{ddae5592-adc3-4c36-bfdd-6c6d91823296.png → 85ca40d2-f02e-45a4-9db0-c483f6ae1db5.png} +0 -0
- /kotonebot/kaa/sprites/{15fe6944-396c-467b-80db-476bbdf65a80.png → 88207e47-1f50-485f-9984-54cea01d740a.png} +0 -0
- /kotonebot/kaa/sprites/{49ccf947-13a5-4839-8f85-d0fe40094e77.png → 88e01e80-50e2-4b0f-834c-86f6a3508287.png} +0 -0
- /kotonebot/kaa/sprites/{a4553bb1-27b9-47c4-8f51-1cff2129df8e.png → 89b364ae-9050-4671-b595-632ba0efc78b.png} +0 -0
- /kotonebot/kaa/sprites/{2cff833f-10bd-478c-8760-99162c71e9e3.png → 8d1a63f3-7ec4-405c-9d78-d176018389dc.png} +0 -0
- /kotonebot/kaa/sprites/{6e59d072-06f8-488f-a453-8ba60a05d691.png → 8f941a44-bbe8-4d3d-82b3-7b14c2356998.png} +0 -0
- /kotonebot/kaa/sprites/{183df82f-acea-4d40-87a8-18fc8ddab6d0.png → 95962144-c639-4902-ad2d-be11ccc5eaab.png} +0 -0
- /kotonebot/kaa/sprites/{a3384f38-334c-440a-ab06-405bad293bab.png → 96c79132-d55f-43d2-bdb3-6fe55734b6d5.png} +0 -0
- /kotonebot/kaa/sprites/{3fc47270-febf-492e-b8fc-0a9793bc0d56.png → 9895c28f-eba2-4e37-911b-6c0f05f7d72b.png} +0 -0
- /kotonebot/kaa/sprites/{bc01675d-453c-43f2-9075-f9567c8aa6f9.png → 98df22d6-1ff2-4c9a-87e7-f70e9f91019e.png} +0 -0
- /kotonebot/kaa/sprites/{71d6a37d-45df-456f-b673-d1e8b35ee619.png → 9b01dbe2-5043-40af-858c-33bbbf4ccc22.png} +0 -0
- /kotonebot/kaa/sprites/{fda67b44-d46d-4789-89a3-0786c60987ab.png → 9dc9f428-6e6d-4362-b4d4-dce50d9e732e.png} +0 -0
- /kotonebot/kaa/sprites/{3a595ec9-d813-4c09-b8b8-be8f5da88faa.png → 9df02971-cdd8-4464-abf9-8035bc233d2f.png} +0 -0
- /kotonebot/kaa/sprites/{d81b7022-5c81-4533-b949-7e9d75a5b8b4.png → 9e7bf71b-fe8d-43cf-8bdd-6cfb1fb1b597.png} +0 -0
- /kotonebot/kaa/sprites/{2dab2877-c6c3-45d9-849f-fb2d79b7b74e.png → a043ed15-0ceb-49b5-b3df-d03274677340.png} +0 -0
- /kotonebot/kaa/sprites/{6582463d-b4fa-40a1-b771-664c7f71fe9c.png → a200b1e4-2ebc-4c15-bdf2-2575408877f8.png} +0 -0
- /kotonebot/kaa/sprites/{9449ff36-7adb-42d5-b89d-bf9147d62811.png → a718a6f9-db30-4a9c-9d2b-b83055cf36ae.png} +0 -0
- /kotonebot/kaa/sprites/{966bcfd4-fefc-4704-907d-45bc6098d3f4.png → a7ada2b7-1366-40c8-864e-fbb42d248124.png} +0 -0
- /kotonebot/kaa/sprites/{b6f5243b-cfb4-42d2-b4eb-2fd1a9d33ab7.png → aa42da27-2c6a-4731-9678-edd3aefde4a7.png} +0 -0
- /kotonebot/kaa/sprites/{0002785c-3caa-4c8f-8d47-f29aee04a588.png → aaa770da-fc42-4e4a-978c-8fef22c0ebf9.png} +0 -0
- /kotonebot/kaa/sprites/{83f9e9a0-54dd-4601-8e54-3091c2892e67.png → af54e00c-b768-4497-829b-6bfac16f4efc.png} +0 -0
- /kotonebot/kaa/sprites/{0554264f-0474-44d0-9209-8135d8840c53.png → afe94aea-47e2-4310-8e25-3e7cadc5a75d.png} +0 -0
- /kotonebot/kaa/sprites/{0a4c6cbe-f42e-4301-9c1a-101fc33421d2.png → b0a88b9e-358f-4f35-b823-d6c025a516cf.png} +0 -0
- /kotonebot/kaa/sprites/{b25627d6-3352-4fe8-93c2-b653efe104d4.png → b4ede50d-7edb-4461-bee6-77d13456fa30.png} +0 -0
- /kotonebot/kaa/sprites/{f5727018-9a23-40de-840e-610d6e5dfa9d.png → b503e883-c9d2-46c0-9de2-158770abb32b.png} +0 -0
- /kotonebot/kaa/sprites/{92a42da1-d8d2-4233-b6d0-5997a72f3d03.png → b60b3563-20b4-46ad-b36b-3113d9e07d4c.png} +0 -0
- /kotonebot/kaa/sprites/{67f00dd1-86c9-4a49-a37c-87879171a46a.png → b9ded3ea-9701-441d-a593-e73e44d5fa3f.png} +0 -0
- /kotonebot/kaa/sprites/{be83e205-8ec5-452f-b42b-b98156516aa8.png → b9f285e4-eb97-47f0-9ca5-28ca558acf58.png} +0 -0
- /kotonebot/kaa/sprites/{6cacdb8f-2ea3-4e3c-a124-b957b75ea427.png → bbee032e-7fc1-4b4d-b1db-cc54b24c20c8.png} +0 -0
- /kotonebot/kaa/sprites/{401966c8-2095-4eef-b92a-764122de02d9.png → bc68fbda-8e6d-4368-b322-49a6854d81e3.png} +0 -0
- /kotonebot/kaa/sprites/{12151e09-e5f1-4b1d-a211-63cb300cb082.png → bf8d6419-472c-4941-8d69-9bb01af5c71a.png} +0 -0
- /kotonebot/kaa/sprites/{9d80c1ef-0f42-4622-ab9a-bfcc077dace6.png → c3548011-dc57-4542-a855-1e7f9d7762f7.png} +0 -0
- /kotonebot/kaa/sprites/{8fb17c7f-778d-4cd5-8d2f-dbf21d264297.png → c46f1705-b4d5-4f39-b138-391a85fb0302.png} +0 -0
- /kotonebot/kaa/sprites/{f58c3a84-60ea-415b-ac63-4b534dc8cb6c.png → c58be1dd-1981-42ee-8de3-e365102884e5.png} +0 -0
- /kotonebot/kaa/sprites/{dd699396-5500-43ad-8470-cf7a8ba013ec.png → c8321b5a-8f65-4465-892a-a3432efba5ac.png} +0 -0
- /kotonebot/kaa/sprites/{e89c23b0-ca58-49d1-b439-967a4a4a431d.png → c95ee1bb-1e53-4568-ba92-9606071ad3a6.png} +0 -0
- /kotonebot/kaa/sprites/{e04331fe-d62e-4f77-953d-78515ee5686e.png → ca9f52b1-42c0-4091-bc29-efc0da9606e0.png} +0 -0
- /kotonebot/kaa/sprites/{d56feb26-d560-423f-b5f8-dc06f7a3c8a1.png → ccba7903-9882-4982-ab84-355667d8419a.png} +0 -0
- /kotonebot/kaa/sprites/{e4a92c92-0974-40e0-b488-16ea7a4c1a29.png → d0dd43b7-5571-4e47-af51-796b4a6a1cfe.png} +0 -0
- /kotonebot/kaa/sprites/{e075c8cb-7eef-47cf-b9fe-9e3d1bd98e85.png → d274bf4d-f4ff-4270-9a5f-87685a0c6817.png} +0 -0
- /kotonebot/kaa/sprites/{64298c97-baac-48b9-be7d-cb14091aa3cb.png → d3565383-91b0-4b33-87a9-3468dfd56e52.png} +0 -0
- /kotonebot/kaa/sprites/{c3562fef-44f7-43d2-a4e6-e7ee21f8bdc5.png → d552db90-8e22-427c-b004-1799adbcc6ba.png} +0 -0
- /kotonebot/kaa/sprites/{681157d7-b37f-442f-b784-86fa9029ecdb.png → d5943dc2-12df-42bb-84bc-d6958260cb75.png} +0 -0
- /kotonebot/kaa/sprites/{10d9a788-24a2-42e1-9284-78f507986606.png → d5be0aac-6f00-4961-b21c-4075bd6ca528.png} +0 -0
- /kotonebot/kaa/sprites/{c5774fb4-be11-4b28-8f58-299ae8872cc1.png → d65cf124-6c8e-41e4-80dc-0c63b41d5636.png} +0 -0
- /kotonebot/kaa/sprites/{9a9d9398-15df-46ea-a247-04ba01f61603.png → d79069c1-3b8e-4df7-8b14-4eeaa44241e1.png} +0 -0
- /kotonebot/kaa/sprites/{5d3b3a20-89bb-4cf2-9973-25581c32e91c.png → db3ab847-948d-4ee0-b5cb-c57c0caa24fd.png} +0 -0
- /kotonebot/kaa/sprites/{610ea09a-d623-428f-ac97-1b51dc5e9202.png → dbc449e9-404e-435b-8b0f-3c853c7f0efe.png} +0 -0
- /kotonebot/kaa/sprites/{25f18ff9-dbae-4aed-87b4-c05ca6c4ebf4.png → dc3f2602-1f20-460a-b408-693001aa70bc.png} +0 -0
- /kotonebot/kaa/sprites/{f217d7cf-acf5-44eb-9f99-025bbcaea866.png → dcb63213-c81e-4eb7-82f1-a16a838299fe.png} +0 -0
- /kotonebot/kaa/sprites/{bcc433e0-8a4e-455f-b625-4583cea19c1c.png → df004f6b-683d-41e8-848f-2a838c585f43.png} +0 -0
- /kotonebot/kaa/sprites/{94021aa4-fb87-41e7-920a-988a360f8321.png → dfab89de-7365-4bc8-b332-6f62733123a2.png} +0 -0
- /kotonebot/kaa/sprites/{12d0271c-1a86-4d2c-b379-b7df847fe20b.png → e0a34a9a-69b6-4732-9b1c-7a2c6445cb76.png} +0 -0
- /kotonebot/kaa/sprites/{e281792b-000b-4048-afb7-e8bb0dbd88b3.png → e0cea27c-5b4e-4831-8fcf-65bccb9e5950.png} +0 -0
- /kotonebot/kaa/sprites/{a514ce10-bff1-4aa0-9625-bf560dcb8be5.png → e311e99e-ae64-442a-aed1-6fac29687d18.png} +0 -0
- /kotonebot/kaa/sprites/{9dfa46c9-54ec-4dd7-8f2e-e1e66c1206f1.png → e8e25d3c-569e-4eae-a707-3afa8c5f46ec.png} +0 -0
- /kotonebot/kaa/sprites/{951ae4be-40f3-4ccc-8578-77aca7f25eef.png → e9afeef0-fcbe-4d97-8b39-c57ab24a3f84.png} +0 -0
- /kotonebot/kaa/sprites/{8a2938ad-5657-4f66-8447-4bc7fa45b857.png → ec9656c3-a984-47db-8661-e1ae8751d288.png} +0 -0
- /kotonebot/kaa/sprites/{377857a9-c37f-4a90-afa9-00c4ff7b24ae.png → ee4862f3-f298-446e-a68b-bd97259052e6.png} +0 -0
- /kotonebot/kaa/sprites/{3e34e821-ae69-49aa-9d04-bc34b3037cd5.png → ef585824-7bfa-427a-a185-4317c0bcb4f6.png} +0 -0
- /kotonebot/kaa/sprites/{87c7532f-2394-403e-a6d8-7a216043ec13.png → ef861253-914d-436e-aa01-731a5dd11e38.png} +0 -0
- /kotonebot/kaa/sprites/{97a543a8-a859-4a1e-8e33-602f600db389.png → f0b983cd-8bce-4b67-9214-493364244c26.png} +0 -0
- /kotonebot/kaa/sprites/{143db8eb-fdde-4de0-a946-a14123b9262e.png → f2906fc0-9192-48ca-bc5d-52e922b04d8d.png} +0 -0
- /kotonebot/kaa/sprites/{f543861e-c3d5-4bc9-a677-47f9e86918ea.png → f3890caa-fa8b-43bc-ba30-82c5bbe1d12a.png} +0 -0
- /kotonebot/kaa/sprites/{d6314592-b8a4-4025-9875-b135bf986cf7.png → f4c3a6f9-1149-4530-af30-c56d7e3d02b9.png} +0 -0
- /kotonebot/kaa/sprites/{1f9f101b-2647-4d14-931e-7a8307495475.png → fa3bdcef-dfba-4cf2-a06f-e6078c07fb7d.png} +0 -0
- /kotonebot/kaa/sprites/{9e0492b7-3b66-48a2-b589-91e7fd16106d.png → fab770fd-e250-4dd4-b9d2-80966ad452ac.png} +0 -0
- /kotonebot/kaa/sprites/{f2d8a534-8afd-475c-ac20-738c7efffc90.png → fb2f308f-a025-4606-b789-0455c7cf0af8.png} +0 -0
- /kotonebot/kaa/sprites/{4622e955-7bb1-450d-a776-01543540fde3.png → fcc71fcd-b28e-4247-beb6-6f5422218c54.png} +0 -0
- /kotonebot/kaa/sprites/{04feeecc-a607-402d-bbc4-a71af87c7fc2.png → fe42018b-4987-4389-8d44-fb0cfd0f4dab.png} +0 -0
- {ksaa-2025.7.20.0.dist-info → ksaa-2025.7.27.0.dist-info}/WHEEL +0 -0
- {ksaa-2025.7.20.0.dist-info → ksaa-2025.7.27.0.dist-info}/entry_points.txt +0 -0
- {ksaa-2025.7.20.0.dist-info → ksaa-2025.7.27.0.dist-info}/licenses/LICENSE +0 -0
- {ksaa-2025.7.20.0.dist-info → ksaa-2025.7.27.0.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
|
+
)
|