From b18c6ae6e8e3f15208efaf802f979c45b0b58d0a Mon Sep 17 00:00:00 2001 From: Johnny Gear Date: Fri, 9 Jan 2026 16:33:38 -0600 Subject: [PATCH] db migrations, add/remove doms --- Pipfile | 1 + Pipfile.lock | 411 ++++++++++++++++++++++++++++------------- db/models.py | 37 ++++ db/queries.py | 25 ++- migrations/001_init.py | 146 +++++++++++++++ settings.py | 2 + telegram/commands.py | 75 +++++++- telegram/telegram.py | 20 +- 8 files changed, 583 insertions(+), 134 deletions(-) create mode 100644 migrations/001_init.py diff --git a/Pipfile b/Pipfile index 3d5833e..f379dae 100644 --- a/Pipfile +++ b/Pipfile @@ -9,6 +9,7 @@ aiohttp = "*" scheduler = "*" pytz = "*" peewee = "*" +peewee-migrate = "*" [dev-packages] diff --git a/Pipfile.lock b/Pipfile.lock index 6e89182..07c13ad 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "3189468ccffbb23866656384675ad9f79f061393b93965ce86aa2c54483e4776" + "sha256": "a598b3b97fc476eba41807a363b2528dfd7ec66f33b33f6b0703c004aaad22f9" }, "pipfile-spec": 6, "requires": { @@ -26,130 +26,130 @@ }, "aiohttp": { "hashes": [ - "sha256:04c3971421576ed24c191f610052bcb2f059e395bc2489dd99e397f9bc466329", - "sha256:05c4dd3c48fb5f15db31f57eb35374cb0c09afdde532e7fb70a75aede0ed30f6", - "sha256:070599407f4954021509193404c4ac53153525a19531051661440644728ba9a7", - "sha256:0740f31a60848d6edb296a0df827473eede90c689b8f9f2a4cdde74889eb2254", - "sha256:088912a78b4d4f547a1f19c099d5a506df17eacec3c6f4375e2831ec1d995742", - "sha256:0a3d54e822688b56e9f6b5816fb3de3a3a64660efac64e4c2dc435230ad23bad", - "sha256:0db1e24b852f5f664cd728db140cf11ea0e82450471232a394b3d1a540b0f906", - "sha256:0e87dff73f46e969af38ab3f7cb75316a7c944e2e574ff7c933bc01b10def7f5", - "sha256:1237c1375eaef0db4dcd7c2559f42e8af7b87ea7d295b118c60c36a6e61cb811", - "sha256:16f15a4eac3bc2d76c45f7ebdd48a65d41b242eb6c31c2245463b40b34584ded", - "sha256:1f9b2c2d4b9d958b1f9ae0c984ec1dd6b6689e15c75045be8ccb4011426268ca", - "sha256:204ffff2426c25dfda401ba08da85f9c59525cdc42bda26660463dd1cbcfec6f", - "sha256:20b10bbfbff766294fe99987f7bb3b74fdd2f1a2905f2562132641ad434dcf98", - "sha256:20db2d67985d71ca033443a1ba2001c4b5693fe09b0e29f6d9358a99d4d62a8a", - "sha256:228a1cd556b3caca590e9511a89444925da87d35219a49ab5da0c36d2d943a6a", - "sha256:2372b15a5f62ed37789a6b383ff7344fc5b9f243999b0cd9b629d8bc5f5b4155", - "sha256:23ad365e30108c422d0b4428cf271156dd56790f6dd50d770b8e360e6c5ab2e6", - "sha256:23fb0783bc1a33640036465019d3bba069942616a6a2353c6907d7fe1ccdaf4e", - "sha256:2475391c29230e063ef53a66669b7b691c9bfc3f1426a0f7bcdf1216bdbac38b", - "sha256:27e569eb9d9e95dbd55c0fc3ec3a9335defbf1d8bc1d20171a49f3c4c607b93e", - "sha256:29562998ec66f988d49fb83c9b01694fa927186b781463f376c5845c121e4e0b", - "sha256:2adebd4577724dcae085665f294cc57c8701ddd4d26140504db622b8d566d7aa", - "sha256:2ca6ffef405fc9c09a746cb5d019c1672cd7f402542e379afc66b370833170cf", - "sha256:2e1a9bea6244a1d05a4e57c295d69e159a5c50d8ef16aa390948ee873478d9a5", - "sha256:364e25edaabd3d37b1db1f0cbcee8c73c9a3727bfa262b83e5e4cf3489a2a9dc", - "sha256:364f55663085d658b8462a1c3f17b2b84a5c2e1ba858e1b79bff7b2e24ad1514", - "sha256:39d02cb6025fe1aabca329c5632f48c9532a3dabccd859e7e2f110668972331f", - "sha256:3a92cf4b9bea33e15ecbaa5c59921be0f23222608143d025c989924f7e3e0c07", - "sha256:40176a52c186aefef6eb3cad2cdd30cd06e3afbe88fe8ab2af9c0b90f228daca", - "sha256:4356474ad6333e41ccefd39eae869ba15a6c5299c9c01dfdcfdd5c107be4363e", - "sha256:43dff14e35aba17e3d6d5ba628858fb8cb51e30f44724a2d2f0c75be492c55e9", - "sha256:4647d02df098f6434bafd7f32ad14942f05a9caa06c7016fdcc816f343997dd0", - "sha256:47f438b1a28e926c37632bff3c44df7d27c9b57aaf4e34b1def3c07111fdb782", - "sha256:4dd3db9d0f4ebca1d887d76f7cdbcd1116ac0d05a9221b9dad82c64a62578c4d", - "sha256:4ebf9cfc9ba24a74cf0718f04aac2a3bbe745902cc7c5ebc55c0f3b5777ef213", - "sha256:5276807b9de9092af38ed23ce120539ab0ac955547b38563a9ba4f5b07b95293", - "sha256:53b07472f235eb80e826ad038c9d106c2f653584753f3ddab907c83f49eedead", - "sha256:550bf765101ae721ee1d37d8095f47b1f220650f85fe1af37a90ce75bab89d04", - "sha256:56d36e80d2003fa3fc0207fac644216d8532e9504a785ef9a8fd013f84a42c61", - "sha256:585542825c4bc662221fb257889e011a5aa00f1ae4d75d1d246a5225289183e3", - "sha256:5b927cf9b935a13e33644cbed6c8c4b2d0f25b713d838743f8fe7191b33829c4", - "sha256:5d7f02042c1f009ffb70067326ef183a047425bb2ff3bc434ead4dd4a4a66a2b", - "sha256:6315fb6977f1d0dd41a107c527fee2ed5ab0550b7d885bc15fee20ccb17891da", - "sha256:66bac29b95a00db411cd758fea0e4b9bdba6d549dfe333f9a945430f5f2cc5a6", - "sha256:6c00dbcf5f0d88796151e264a8eab23de2997c9303dd7c0bf622e23b24d3ce22", - "sha256:6e7352512f763f760baaed2637055c49134fd1d35b37c2dedfac35bfe5cf8725", - "sha256:7519bdc7dfc1940d201651b52bf5e03f5503bda45ad6eacf64dda98be5b2b6be", - "sha256:78cd586d8331fb8e241c2dd6b2f4061778cc69e150514b39a9e28dd050475661", - "sha256:7a653d872afe9f33497215745da7a943d1dc15b728a9c8da1c3ac423af35178e", - "sha256:7c3a50345635a02db61792c85bb86daffac05330f6473d524f1a4e3ef9d0046d", - "sha256:7fbdf5ad6084f1940ce88933de34b62358d0f4a0b6ec097362dcd3e5a65a4989", - "sha256:7fd19df530c292542636c2a9a85854fab93474396a52f1695e799186bbd7f24c", - "sha256:868e195e39b24aaa930b063c08bb0c17924899c16c672a28a65afded9c46c6ec", - "sha256:8709a0f05d59a71f33fd05c17fc11fcb8c30140506e13c2f5e8ee1b8964e1b45", - "sha256:88d6c017966a78c5265d996c19cdb79235be5e6412268d7e2ce7dee339471b7a", - "sha256:8aa7c807df234f693fed0ecd507192fc97692e61fee5702cdc11155d2e5cadc8", - "sha256:8b2f1414f6a1e0683f212ec80e813f4abef94c739fd090b66c9adf9d2a05feac", - "sha256:93655083005d71cd6c072cdab54c886e6570ad2c4592139c3fb967bfc19e4694", - "sha256:939ced4a7add92296b0ad38892ce62b98c619288a081170695c6babe4f50e636", - "sha256:9434bc0d80076138ea986833156c5a48c9c7a8abb0c96039ddbb4afc93184169", - "sha256:94f05348c4406450f9d73d38efb41d669ad6cd90c7ee194810d0eefbfa875a7a", - "sha256:960c2fc686ba27b535f9fd2b52d87ecd7e4fd1cf877f6a5cba8afb5b4a8bd204", - "sha256:96581619c57419c3d7d78703d5b78c1e5e5fc0172d60f555bdebaced82ded19a", - "sha256:97a0895a8e840ab3520e2288db7cace3a1981300d48babeb50e7425609e2e0ab", - "sha256:98c4fb90bb82b70a4ed79ca35f656f4281885be076f3f970ce315402b53099ae", - "sha256:99c5280a329d5fa18ef30fd10c793a190d996567667908bef8a7f81f8202b948", - "sha256:9acda8604a57bb60544e4646a4615c1866ee6c04a8edef9b8ee6fd1d8fa2ddc8", - "sha256:9c705601e16c03466cb72011bd1af55d68fa65b045356d8f96c216e5f6db0fa5", - "sha256:9e8f8afb552297aca127c90cb840e9a1d4bfd6a10d7d8f2d9176e1acc69bad30", - "sha256:9eb3e33fdbe43f88c3c75fa608c25e7c47bbd80f48d012763cb67c47f39a7e16", - "sha256:9ec49dff7e2b3c85cdeaa412e9d438f0ecd71676fde61ec57027dd392f00c693", - "sha256:9f377d0a924e5cc94dc620bc6366fc3e889586a7f18b748901cf016c916e2084", - "sha256:a09a6d073fb5789456545bdee2474d14395792faa0527887f2f4ec1a486a59d3", - "sha256:a2713a95b47374169409d18103366de1050fe0ea73db358fc7a7acb2880422d4", - "sha256:a3b6fb0c207cc661fa0bf8c66d8d9b657331ccc814f4719468af61034b478592", - "sha256:a4b88ebe35ce54205c7074f7302bd08a4cb83256a3e0870c72d6f68a3aaf8e49", - "sha256:a88d13e7ca367394908f8a276b89d04a3652044612b9a408a0bb22a5ed976a1a", - "sha256:ac6cde5fba8d7d8c6ac963dbb0256a9854e9fafff52fbcc58fdf819357892c3e", - "sha256:ae32f24bbfb7dbb485a24b30b1149e2f200be94777232aeadba3eecece4d0aa4", - "sha256:b009194665bcd128e23eaddef362e745601afa4641930848af4c8559e88f18f9", - "sha256:b1e56bab2e12b2b9ed300218c351ee2a3d8c8fdab5b1ec6193e11a817767e47b", - "sha256:b395bbca716c38bef3c764f187860e88c724b342c26275bc03e906142fc5964f", - "sha256:b59d13c443f8e049d9e94099c7e412e34610f1f49be0f230ec656a10692a5802", - "sha256:ba2715d842ffa787be87cbfce150d5e88c87a98e0b62e0f5aa489169a393dbbb", - "sha256:bb7fb776645af5cc58ab804c58d7eba545a97e047254a52ce89c157b5af6cd0b", - "sha256:c038a8fdc8103cd51dbd986ecdce141473ffd9775a7a8057a6ed9c3653478011", - "sha256:c20423ce14771d98353d2e25e83591fa75dfa90a3c1848f3d7c68243b4fbded3", - "sha256:c5c94825f744694c4b8db20b71dba9a257cd2ba8e010a803042123f3a25d50d7", - "sha256:cf00e5db968c3f67eccd2778574cf64d8b27d95b237770aa32400bd7a1ca4f6c", - "sha256:d23b5fe492b0805a50d3371e8a728a9134d8de5447dce4c885f5587294750734", - "sha256:d7bc4b7f9c4921eba72677cd9fedd2308f4a4ca3e12fab58935295ad9ea98700", - "sha256:d8a9b889aeabd7a4e9af0b7f4ab5ad94d42e7ff679aaec6d0db21e3b639ad58d", - "sha256:dacd50501cd017f8cccb328da0c90823511d70d24a323196826d923aad865901", - "sha256:e036a3a645fe92309ec34b918394bb377950cbb43039a97edae6c08db64b23e2", - "sha256:e09a0a06348a2dd73e7213353c90d709502d9786219f69b731f6caa0efeb46f5", - "sha256:e0c8e31cfcc4592cb200160344b2fb6ae0f9e4effe06c644b5a125d4ae5ebe23", - "sha256:e1b4951125ec10c70802f2cb09736c895861cd39fd9dcb35107b4dc8ae6220b8", - "sha256:e2a9ea08e8c58bb17655630198833109227dea914cd20be660f52215f6de5613", - "sha256:e3403f24bcb9c3b29113611c3c16a2a447c3953ecf86b79775e7be06f7ae7ccb", - "sha256:e574a7d61cf10351d734bcddabbe15ede0eaa8a02070d85446875dc11189a251", - "sha256:e67446b19e014d37342f7195f592a2a948141d15a312fe0e700c2fd2f03124f6", - "sha256:e736c93e9c274fce6419af4aac199984d866e55f8a4cec9114671d0ea9688780", - "sha256:e7c952aefdf2460f4ae55c5e9c3e80aa72f706a6317e06020f80e96253b1accd", - "sha256:e7f8659a48995edee7229522984bd1009c1213929c769c2daa80b40fe49a180c", - "sha256:e96eb1a34396e9430c19d8338d2ec33015e4a87ef2b4449db94c22412e25ccdf", - "sha256:ec7534e63ae0f3759df3a1ed4fa6bc8f75082a924b590619c0dd2f76d7043caa", - "sha256:ed2f9c7216e53c3df02264f25d824b079cc5914f9e2deba94155190ef648ee40", - "sha256:eeacf451c99b4525f700f078becff32c32ec327b10dcf31306a8a52d78166de7", - "sha256:f10d9c0b0188fe85398c61147bbd2a657d616c876863bfeff43376e0e3134673", - "sha256:f2bef8237544f4e42878c61cef4e2839fee6346dc60f5739f876a9c50be7fcdb", - "sha256:f33c8748abef4d8717bb20e8fb1b3e07c6adacb7fd6beaae971a764cf5f30d61", - "sha256:f7c183e786e299b5d6c49fb43a769f8eb8e04a2726a2bd5887b98b5cc2d67940", - "sha256:fa4dcb605c6f82a80c7f95713c2b11c3b8e9893b3ebd2bc9bde93165ed6107be", - "sha256:fa89cb11bc71a63b69568d5b8a25c3ca25b6d54c15f907ca1c130d72f320b76b", - "sha256:fe242cd381e0fb65758faf5ad96c2e460df6ee5b2de1072fe97e4127927e00b4", - "sha256:fe91b87fc295973096251e2d25a811388e7d8adf3bd2b97ef6ae78bc4ac6c476", - "sha256:fed38a5edb7945f4d1bcabe2fcd05db4f6ec7e0e82560088b754f7e08d93772d", - "sha256:ff0a7b0a82a7ab905cbda74006318d1b12e37c797eb1b0d4eb3e316cf47f658f", - "sha256:ff15c147b2ad66da1f2cbb0622313f2242d8e6e8f9b79b5206c84523a4473248", - "sha256:ff5e771f5dcbc81c64898c597a434f7682f2259e0cd666932a913d53d1341d1a" + "sha256:01ad2529d4b5035578f5081606a465f3b814c542882804e2e8cda61adf5c71bf", + "sha256:042e9e0bcb5fba81886c8b4fbb9a09d6b8a00245fd8d88e4d989c1f96c74164c", + "sha256:05861afbbec40650d8a07ea324367cb93e9e8cc7762e04dd4405df99fa65159c", + "sha256:084911a532763e9d3dd95adf78a78f4096cd5f58cdc18e6fdbc1b58417a45423", + "sha256:0add0900ff220d1d5c5ebbf99ed88b0c1bbf87aa7e4262300ed1376a6b13414f", + "sha256:0db318f7a6f065d84cb1e02662c526294450b314a02bd9e2a8e67f0d8564ce40", + "sha256:10b47b7ba335d2e9b1239fa571131a87e2d8ec96b333e68b2a305e7a98b0bae2", + "sha256:1449ceddcdbcf2e0446957863af03ebaaa03f94c090f945411b61269e2cb5daf", + "sha256:147e422fd1223005c22b4fe080f5d93ced44460f5f9c105406b753612b587821", + "sha256:1cb93e166e6c28716c8c6aeb5f99dfb6d5ccf482d29fe9bf9a794110e6d0ab64", + "sha256:215a685b6fbbfcf71dfe96e3eba7a6f58f10da1dfdf4889c7dd856abe430dca7", + "sha256:2712039939ec963c237286113c68dbad80a82a4281543f3abf766d9d73228998", + "sha256:27234ef6d85c914f9efeb77ff616dbf4ad2380be0cda40b4db086ffc7ddd1b7d", + "sha256:28e027cf2f6b641693a09f631759b4d9ce9165099d2b5d92af9bd4e197690eea", + "sha256:2b8d8ddba8f95ba17582226f80e2de99c7a7948e66490ef8d947e272a93e9463", + "sha256:2ba0eea45eb5cc3172dbfc497c066f19c41bac70963ea1a67d51fc92e4cf9a80", + "sha256:2be0e9ccf23e8a94f6f0650ce06042cefc6ac703d0d7ab6c7a917289f2539ad4", + "sha256:2e41b18a58da1e474a057b3d35248d8320029f61d70a37629535b16a0c8f3767", + "sha256:2eb752b102b12a76ca02dff751a801f028b4ffbbc478840b473597fc91a9ed43", + "sha256:2fc82186fadc4a8316768d61f3722c230e2c1dcab4200d52d2ebdf2482e47592", + "sha256:2fff83cfc93f18f215896e3a190e8e5cb413ce01553901aca925176e7568963a", + "sha256:31a83ea4aead760dfcb6962efb1d861db48c34379f2ff72db9ddddd4cda9ea2e", + "sha256:34749271508078b261c4abb1767d42b8d0c0cc9449c73a4df494777dc55f0687", + "sha256:34bac00a67a812570d4a460447e1e9e06fae622946955f939051e7cc895cfab8", + "sha256:37239e9f9a7ea9ac5bf6b92b0260b01f8a22281996da609206a84df860bc1261", + "sha256:37da61e244d1749798c151421602884db5270faf479cf0ef03af0ff68954c9dd", + "sha256:3b61b7169ababd7802f9568ed96142616a9118dd2be0d1866e920e77ec8fa92a", + "sha256:3d9908a48eb7416dc1f4524e69f1d32e5d90e3981e4e37eb0aa1cd18f9cfa2a4", + "sha256:3dd4dce1c718e38081c8f35f323209d4c1df7d4db4bab1b5c88a6b4d12b74587", + "sha256:4021b51936308aeea0367b8f006dc999ca02bc118a0cc78c303f50a2ff6afb91", + "sha256:40c5e40ecc29ba010656c18052b877a1c28f84344825efa106705e835c28530f", + "sha256:425c126c0dc43861e22cb1c14ba4c8e45d09516d0a3ae0a3f7494b79f5f233a3", + "sha256:44531a36aa2264a1860089ffd4dce7baf875ee5a6079d5fb42e261c704ef7344", + "sha256:48e377758516d262bde50c2584fc6c578af272559c409eecbdd2bae1601184d6", + "sha256:49a03727c1bba9a97d3e93c9f93ca03a57300f484b6e935463099841261195d3", + "sha256:4ae5b5a0e1926e504c81c5b84353e7a5516d8778fbbff00429fe7b05bb25cbce", + "sha256:4e239d501f73d6db1522599e14b9b321a7e3b1de66ce33d53a765d975e9f4808", + "sha256:56339a36b9f1fc708260c76c87e593e2afb30d26de9ae1eb445b5e051b98a7a1", + "sha256:568f416a4072fbfae453dcf9a99194bbb8bdeab718e08ee13dfa2ba0e4bebf29", + "sha256:5b179331a481cb5529fca8b432d8d3c7001cb217513c94cd72d668d1248688a3", + "sha256:5b6073099fb654e0a068ae678b10feff95c5cae95bbfcbfa7af669d361a8aa6b", + "sha256:5d2d94f1f5fcbe40838ac51a6ab5704a6f9ea42e72ceda48de5e6b898521da51", + "sha256:5dff64413671b0d3e7d5918ea490bdccb97a4ad29b3f311ed423200b2203e01c", + "sha256:5e1d8c8b8f1d91cd08d8f4a3c2b067bfca6ec043d3ff36de0f3a715feeedf926", + "sha256:5f8ca7f2bb6ba8348a3614c7918cc4bb73268c5ac2a207576b7afea19d3d9f64", + "sha256:642f752c3eb117b105acbd87e2c143de710987e09860d674e068c4c2c441034f", + "sha256:65d2ccb7eabee90ce0503c17716fc77226be026dcc3e65cce859a30db715025b", + "sha256:693781c45a4033d31d4187d2436f5ac701e7bbfe5df40d917736108c1cc7436e", + "sha256:694976222c711d1d00ba131904beb60534f93966562f64440d0c9d41b8cdb440", + "sha256:697753042d57f4bf7122cab985bf15d0cef23c770864580f5af4f52023a56bd6", + "sha256:69c56fbc1993fa17043e24a546959c0178fe2b5782405ad4559e6c13975c15e3", + "sha256:6de499a1a44e7de70735d0b39f67c8f25eb3d91eb3103be99ca0fa882cdd987d", + "sha256:6fc0e2337d1a4c3e6acafda6a78a39d4c14caea625124817420abceed36e2415", + "sha256:75ca857eba4e20ce9f546cd59c7007b33906a4cd48f2ff6ccf1ccfc3b646f279", + "sha256:7a4a94eb787e606d0a09404b9c38c113d3b099d508021faa615d70a0131907ce", + "sha256:7b5e8fe4de30df199155baaf64f2fcd604f4c678ed20910db8e2c66dc4b11603", + "sha256:7bfdc049127717581866fa4708791220970ce291c23e28ccf3922c700740fdc0", + "sha256:7e63f210bc1b57ef699035f2b4b6d9ce096b5914414a49b0997c839b2bd2223c", + "sha256:7f9120f7093c2a32d9647abcaf21e6ad275b4fbec5b55969f978b1a97c7c86bf", + "sha256:8057c98e0c8472d8846b9c79f56766bcc57e3e8ac7bfd510482332366c56c591", + "sha256:80dd4c21b0f6237676449c6baaa1039abae86b91636b6c91a7f8e61c87f89540", + "sha256:81e97251d9298386c2b7dbeb490d3d1badbdc69107fb8c9299dd04eb39bddc0e", + "sha256:82611aeec80eb144416956ec85b6ca45a64d76429c1ed46ae1b5f86c6e0c9a26", + "sha256:8542f41a62bcc58fc7f11cf7c90e0ec324ce44950003feb70640fc2a9092c32a", + "sha256:859bd3f2156e81dd01432f5849fc73e2243d4a487c4fd26609b1299534ee1845", + "sha256:87797e645d9d8e222e04160ee32aa06bc5c163e8499f24db719e7852ec23093a", + "sha256:87b9aab6d6ed88235aa2970294f496ff1a1f9adcd724d800e9b952395a80ffd9", + "sha256:8a60e60746623925eab7d25823329941aee7242d559baa119ca2b253c88a7bd6", + "sha256:90455115e5da1c3c51ab619ac57f877da8fd6d73c05aacd125c5ae9819582aba", + "sha256:90751b8eed69435bac9ff4e3d2f6b3af1f57e37ecb0fbeee59c0174c9e2d41df", + "sha256:947c26539750deeaee933b000fb6517cc770bbd064bad6033f1cff4803881e43", + "sha256:96d604498a7c782cb15a51c406acaea70d8c027ee6b90c569baa6e7b93073679", + "sha256:988a8c5e317544fdf0d39871559e67b6341065b87fceac641108c2096d5506b7", + "sha256:9a9dc347e5a3dc7dfdbc1f82da0ef29e388ddb2ed281bfce9dd8248a313e62b7", + "sha256:9ae8dd55c8e6c4257eae3a20fd2c8f41edaea5992ed67156642493b8daf3cecc", + "sha256:9af5e68ee47d6534d36791bbe9b646d2a7c7deb6fc24d7943628edfbb3581f29", + "sha256:9b174f267b5cfb9a7dba9ee6859cecd234e9a681841eb85068059bc867fb8f02", + "sha256:9bf9f7a65e7aa20dd764151fb3d616c81088f91f8df39c3893a536e279b4b984", + "sha256:9d4c940f02f49483b18b079d1c27ab948721852b281f8b015c058100e9421dd1", + "sha256:9ebf57d09e131f5323464bd347135a88622d1c0976e88ce15b670e7ad57e4bd6", + "sha256:a19884d2ee70b06d9204b2727a7b9f983d0c684c650254679e716b0b77920632", + "sha256:a1e53262fd202e4b40b70c3aff944a8155059beedc8a89bba9dc1f9ef06a1b56", + "sha256:a2212ad43c0833a873d0fb3c63fa1bacedd4cf6af2fee62bf4b739ceec3ab239", + "sha256:a45530014d7a1e09f4a55f4f43097ba0fd155089372e105e4bff4ca76cb1b168", + "sha256:a949eee43d3782f2daae4f4a2819b2cb9b0c5d3b7f7a927067cc84dafdbb9f88", + "sha256:add1da70de90a2569c5e15249ff76a631ccacfe198375eead4aadf3b8dc849dc", + "sha256:af71fff7bac6bb7508956696dce8f6eec2bbb045eceb40343944b1ae62b5ef11", + "sha256:b04be762396457bef43f3597c991e192ee7da460a4953d7e647ee4b1c28e7046", + "sha256:b0d95340658b9d2f11d9697f59b3814a9d3bb4b7a7c20b131df4bcef464037c0", + "sha256:b1a6102b4d3ebc07dad44fbf07b45bb600300f15b552ddf1851b5390202ea2e3", + "sha256:b46020d11d23fe16551466c77823df9cc2f2c1e63cc965daf67fa5eec6ca1877", + "sha256:b556c85915d8efaed322bf1bdae9486aa0f3f764195a0fb6ee962e5c71ef5ce1", + "sha256:b903a4dfee7d347e2d87697d0713be59e0b87925be030c9178c5faa58ea58d5c", + "sha256:b928f30fe49574253644b1ca44b1b8adbd903aa0da4b9054a6c20fc7f4092a25", + "sha256:b99281b0704c103d4e11e72a76f1b543d4946fea7dd10767e7e1b5f00d4e5704", + "sha256:bae5c2ed2eae26cc382020edad80d01f36cb8e746da40b292e68fec40421dc6a", + "sha256:bb4f7475e359992b580559e008c598091c45b5088f28614e855e42d39c2f1033", + "sha256:bbe7d4cecacb439e2e2a8a1a7b935c25b812af7a5fd26503a66dadf428e79ec1", + "sha256:bfc1cc2fe31a6026a8a88e4ecfb98d7f6b1fec150cfd708adbfd1d2f42257c29", + "sha256:c014c7ea7fb775dd015b2d3137378b7be0249a448a1612268b5a90c2d81de04d", + "sha256:c048058117fd649334d81b4b526e94bde3ccaddb20463a815ced6ecbb7d11160", + "sha256:c0e2d366af265797506f0283487223146af57815b388623f0357ef7eac9b209d", + "sha256:c19b90316ad3b24c69cd78d5c9b4f3aa4497643685901185b65166293d36a00f", + "sha256:c685f2d80bb67ca8c3837823ad76196b3694b0159d232206d1e461d3d434666f", + "sha256:c6b8568a3bb5819a0ad087f16d40e5a3fb6099f39ea1d5625a3edc1e923fc538", + "sha256:d32764c6c9aafb7fb55366a224756387cd50bfa720f32b88e0e6fa45b27dcf29", + "sha256:d5a372fd5afd301b3a89582817fdcdb6c34124787c70dbcc616f259013e7eef7", + "sha256:d60ac9663f44168038586cab2157e122e46bdef09e9368b37f2d82d354c23f72", + "sha256:dca68018bf48c251ba17c72ed479f4dafe9dbd5a73707ad8d28a38d11f3d42af", + "sha256:de2c184bb1fe2cbd2cefba613e9db29a5ab559323f994b6737e370d3da0ac455", + "sha256:e3531d63d3bdfa7e3ac5e9b27b2dd7ec9df3206a98e0b3445fa906f233264c57", + "sha256:e50a2e1404f063427c9d027378472316201a2290959a295169bcf25992d04558", + "sha256:e636b3c5f61da31a92bf0d91da83e58fdfa96f178ba682f11d24f31944cdd28c", + "sha256:ea37047c6b367fd4bd632bff8077449b8fa034b69e812a18e0132a00fae6e808", + "sha256:f33ed1a2bf1997a36661874b017f5c4b760f41266341af36febaf271d179f6d7", + "sha256:f76c1e3fe7d7c8afad7ed193f89a292e1999608170dcc9751a7462a87dfd5bc0", + "sha256:f9444f105664c4ce47a2a7171a2418bce5b7bae45fb610f4e2c36045d85911d3", + "sha256:fc290605db2a917f6e81b0e1e0796469871f5af381ce15c604a3c5c7e51cb730", + "sha256:fc353029f176fd2b3ec6cfc71be166aba1936fe5d73dd1992ce289ca6647a9aa", + "sha256:fee0c6bc7db1de362252affec009707a17478a00ec69f797d23ca256e36d5940" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==3.13.2" + "version": "==3.13.3" }, "aiosignal": { "hashes": [ @@ -167,6 +167,40 @@ "markers": "python_version >= '3.9'", "version": "==25.4.0" }, + "blinker": { + "hashes": [ + "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", + "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc" + ], + "markers": "python_version >= '3.9'", + "version": "==1.9.0" + }, + "click": { + "hashes": [ + "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", + "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6" + ], + "markers": "python_version >= '3.10'", + "version": "==8.3.1" + }, + "flask": { + "hashes": [ + "sha256:bf656c15c80190ed628ad08cdfd3aaa35beb087855e2f494910aa3774cc4fd87", + "sha256:ca1d8112ec8a6158cc29ea4858963350011b5c846a414cdb7a954aa9e967d03c" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==3.1.2" + }, + "flask-login": { + "hashes": [ + "sha256:5e23d14a607ef12806c699590b89d0f0e0d67baeec599d75947bf9c147330333", + "sha256:849b25b82a436bf830a054e74214074af59097171562ab10bfa999e6b78aae5d" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==0.6.3" + }, "frozenlist": { "hashes": [ "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686", @@ -311,6 +345,117 @@ "markers": "python_version >= '3.8'", "version": "==3.11" }, + "itsdangerous": { + "hashes": [ + "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", + "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173" + ], + "markers": "python_version >= '3.8'", + "version": "==2.2.0" + }, + "jinja2": { + "hashes": [ + "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", + "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + ], + "markers": "python_version >= '3.7'", + "version": "==3.1.6" + }, + "markupsafe": { + "hashes": [ + "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", + "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", + "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", + "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", + "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", + "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c", + "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", + "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", + "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", + "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", + "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", + "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26", + "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", + "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", + "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", + "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", + "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", + "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", + "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", + "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", + "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", + "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", + "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", + "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", + "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", + "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758", + "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", + "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8", + "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", + "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", + "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", + "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", + "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", + "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", + "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", + "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", + "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2", + "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", + "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", + "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", + "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", + "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", + "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", + "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", + "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", + "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e", + "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", + "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", + "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", + "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", + "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", + "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", + "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b", + "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", + "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", + "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", + "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d", + "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", + "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", + "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", + "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", + "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", + "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", + "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", + "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", + "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", + "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", + "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", + "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", + "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", + "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", + "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", + "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", + "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7", + "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", + "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", + "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", + "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", + "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", + "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42", + "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", + "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", + "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", + "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", + "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", + "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", + "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc", + "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", + "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50" + ], + "markers": "python_version >= '3.9'", + "version": "==3.0.3" + }, "multidict": { "hashes": [ "sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3", @@ -465,10 +610,20 @@ }, "peewee": { "hashes": [ - "sha256:62c3d93315b1a909360c4b43c3a573b47557a1ec7a4583a71286df2a28d4b72e" + "sha256:de220b94766e6008c466e00ce4ba5299b9a832117d9eb36d45d0062f3cfd7417", + "sha256:f88292a6f0d7b906cb26bca9c8599b8f4d8920ebd36124400d0cbaaaf915511f" ], "index": "pypi", - "version": "==3.18.3" + "version": "==3.19.0" + }, + "peewee-migrate": { + "hashes": [ + "sha256:9df152738add75d3f7b073fccab02648b844404e50910ab29db4f3656a377a5b", + "sha256:e31d88225c7e9ba3f28d49c0fc11c3a6f1e11ba8266da7ffe268bede0c51360a" + ], + "index": "pypi", + "markers": "python_version >= '3.10' and python_version < '4.0'", + "version": "==1.14.3" }, "propcache": { "hashes": [ @@ -711,6 +866,14 @@ "markers": "python_version < '3.13'", "version": "==4.15.0" }, + "werkzeug": { + "hashes": [ + "sha256:5111e36e91086ece91f93268bb39b4a35c1e6f1feac762c9c822ded0a4e322dc", + "sha256:6a548b0e88955dd07ccb25539d7d0cc97417ee9e179677d22c7041c8f078ce67" + ], + "markers": "python_version >= '3.9'", + "version": "==3.1.5" + }, "yarl": { "hashes": [ "sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a", diff --git a/db/models.py b/db/models.py index a6e921c..4f7430e 100644 --- a/db/models.py +++ b/db/models.py @@ -7,6 +7,43 @@ class BaseModel(Model): class Meta: database = database +# +# Order Configuration +# +class User(BaseModel): + telegram_username = TextField(unique=True) + telegram_chat_id = IntegerField() + + class Meta: + table_name = 'user' + +class DomSubUsers(BaseModel): + dom = ForeignKeyField(column_name='dom_id', field='id', model=User) + sub = ForeignKeyField(column_name='sub_id', field='id', model=User) + + class Meta: + table_name = 'dom_sub' + indexes = ( + (('dom_id', 'sub_id'), True), + ) + +class OrdersPool(BaseModel): + name = TextField() + + class Meta: + table_name = 'orders_pool' + +class Order(BaseModel): + name = TextField() + weight = IntegerField() + repeat = FloatField() + + class Meta: + table_name = 'order' + +# +# Order State +# class PunishmentStatus(BaseModel): confirmed_at = DateTimeField(null=True) # TIMESTAMP created_at = DateTimeField() # TIMESTAMP diff --git a/db/queries.py b/db/queries.py index 24e60cd..9c40a23 100644 --- a/db/queries.py +++ b/db/queries.py @@ -1,6 +1,6 @@ import datetime -from .models import database, Repeat, SkipDay, OrderStatus, PunishmentStatus +from .models import database, User, DomSubUsers, Repeat, SkipDay, OrderStatus, PunishmentStatus def initdb(): database.connect() @@ -11,6 +11,29 @@ def initdb(): PunishmentStatus ]) +def user_add(username, chat_id): + return User.create( + telegram_username=username, + telegram_chat_id=chat_id + ) + +def user_get(username): + return User.get( + telegram_username=username + ) + +def domsubusers_add(sub, dom): + return DomSubUsers.create( + sub=sub, + dom=dom + ) +def domsubusers_delete(sub, dom): + q = DomSubUsers.get( + sub=sub, + dom=dom + ).delete() + return q.execute() + def repeat_get(): try: return Repeat.get() diff --git a/migrations/001_init.py b/migrations/001_init.py new file mode 100644 index 0000000..78bbdb6 --- /dev/null +++ b/migrations/001_init.py @@ -0,0 +1,146 @@ +"""Peewee migrations -- 001_init.py. + +Some examples (model - class or model name):: + + > Model = migrator.orm['table_name'] # Return model in current state by name + > Model = migrator.ModelClass # Return model in current state by name + + > migrator.sql(sql) # Run custom SQL + > migrator.run(func, *args, **kwargs) # Run python function with the given args + > migrator.create_model(Model) # Create a model (could be used as decorator) + > migrator.remove_model(model, cascade=True) # Remove a model + > migrator.add_fields(model, **fields) # Add fields to a model + > migrator.change_fields(model, **fields) # Change fields + > migrator.remove_fields(model, *field_names, cascade=True) + > migrator.rename_field(model, old_field_name, new_field_name) + > migrator.rename_table(model, new_table_name) + > migrator.add_index(model, *col_names, unique=False) + > migrator.add_not_null(model, *field_names) + > migrator.add_default(model, field_name, default) + > migrator.add_constraint(model, name, sql) + > migrator.drop_index(model, *col_names) + > migrator.drop_not_null(model, *field_names) + > migrator.drop_constraints(model, *constraints) + +""" + +from contextlib import suppress + +import peewee as pw +from peewee_migrate import Migrator + + +with suppress(ImportError): + import playhouse.postgres_ext as pw_pext + + +def migrate(migrator: Migrator, database: pw.Database, *, fake=False): + """Write your migrations here.""" + + @migrator.create_model + class BaseModel(pw.Model): + id = pw.AutoField() + + class Meta: + table_name = "basemodel" + + @migrator.create_model + class User(pw.Model): + id = pw.AutoField() + telegram_username = pw.TextField(unique=True) + telegram_chat_id = pw.IntegerField() + + class Meta: + table_name = "user" + + @migrator.create_model + class DomSubUsers(pw.Model): + id = pw.AutoField() + dom = pw.ForeignKeyField(column_name='dom_id', field='id', model=migrator.orm['user']) + sub = pw.ForeignKeyField(column_name='sub_id', field='id', model=migrator.orm['user']) + + class Meta: + table_name = "dom_sub" + indexes = [(('dom_id', 'sub_id'), True)] + + @migrator.create_model + class Order(pw.Model): + id = pw.AutoField() + name = pw.TextField() + weight = pw.IntegerField() + repeat = pw.FloatField() + + class Meta: + table_name = "order" + + @migrator.create_model + class OrdersPool(pw.Model): + id = pw.AutoField() + name = pw.TextField() + + class Meta: + table_name = "orders_pool" + + @migrator.create_model + class PunishmentStatus(pw.Model): + id = pw.AutoField() + confirmed_at = pw.DateTimeField(null=True) + created_at = pw.DateTimeField() + mastodon_id = pw.TextField() + text = pw.TextField() + + class Meta: + table_name = "punishment_status" + + @migrator.create_model + class OrderStatus(pw.Model): + id = pw.AutoField() + confirmed_at = pw.DateTimeField(null=True) + created_at = pw.DateTimeField() + due_at = pw.DateTimeField() + mastodon_id = pw.TextField() + punishment = pw.ForeignKeyField(column_name='punishment_id', field='id', model=migrator.orm['punishment_status'], null=True) + text = pw.TextField() + + class Meta: + table_name = "order_status" + + @migrator.create_model + class Repeat(pw.Model): + id = pw.AutoField() + count = pw.IntegerField(default=0) + orders = pw.TextField() + probability = pw.FloatField() + + class Meta: + table_name = "repeat" + + @migrator.create_model + class SkipDay(pw.Model): + id = pw.AutoField() + date = pw.DateField(unique=True) + + class Meta: + table_name = "skip_day" + + +def rollback(migrator: Migrator, database: pw.Database, *, fake=False): + """Write your rollback migrations here.""" + + migrator.remove_model('skip_day') + + migrator.remove_model('repeat') + + migrator.remove_model('order_status') + + migrator.remove_model('punishment_status') + + migrator.remove_model('orders_pool') + + migrator.remove_model('order') + + migrator.remove_model('dom_sub') + + migrator.remove_model('user') + + migrator.remove_model('basemodel') diff --git a/settings.py b/settings.py index 3d0d741..ed343d6 100644 --- a/settings.py +++ b/settings.py @@ -22,3 +22,5 @@ SQLITE_DB = os.environ.get('SQLITE_DB', 'db.sqlite3') ORDERS_YML = os.environ.get('ORDERS_YML', 'orders.yml') TIMEZONE = os.environ.get('TIMEZONE', 'America/Chicago') + +FLASK_URL = os.environ.get("FLASK_URL") diff --git a/telegram/commands.py b/telegram/commands.py index f43e2de..42b5d4b 100644 --- a/telegram/commands.py +++ b/telegram/commands.py @@ -1,12 +1,80 @@ +import re import logging import peewee import datetime -from db.queries import skip_day_put, skip_day_delete, skip_days_upcoming -from .telegram import TelegramCommand +from db.queries import skip_day_put, skip_day_delete, skip_days_upcoming, user_add, user_get, domsubusers_add, domsubusers_delete +from .telegram import Telegram, TelegramCommand +from settings import FLASK_URL logger = logging.getLogger(__name__) +class StartCommand(TelegramCommand): + command_text = '/start' + + async def exec_inner(self, text, update, *args, **kwargs): + username = update['message']['chat']['username'] + chat_id = update['message']['chat']['id'] + + user_add(username, chat_id) + + yield "Welcome to gear orders bot. Add a dom with `/dom_add ` or ask a sub to add you." + +class DomAddCommand(TelegramCommand): + command_regex = re.compile(r"^\/dom_add( (?P@?\w+))$") + + async def exec_inner(self, text, update, session, *args, **kwargs): + dom_username = text.split(' ')[1] + if dom_username.startswith('@'): + dom_username = dom_username[1:] + + sub_username = update['message']['chat']['username'] + sub = user_get(sub_username) + try: + dom = user_get(dom_username) + except: + yield "I'm sorry that user isn't registered with me." + return + + try: + domsubusers_add(sub, dom) + except peewee.IntegrityError: + yield f"@{dom_username} is already on your list of doms" + return + + yield f"Successfully added {dom_username} to your list of doms" + + t = Telegram(session) + await t.message_send(f"@{sub_username} has added you as a dom. You may administer their orders at {FLASK_URL}", dom.telegram_chat_id) + +class DomRemoveCommand(TelegramCommand): + command_regex = re.compile(r"^\/dom_remove( (?P@?\w+))$") + + async def exec_inner(self, text, update, session, *args, **kwargs): + dom_username = text.split(' ')[1] + if dom_username.startswith('@'): + dom_username = dom_username[1:] + + sub_username = update['message']['chat']['username'] + sub = user_get(sub_username) + try: + dom = user_get(dom_username) + except: + yield "I'm sorry that user isn't registered with me." + return + + try: + domsubusers_delete(sub, dom) + except peewee.DoesNotExist: + yield "I'm sorry that user is not on your list of doms" + return + + yield f"Successfully removed {dom_username} from your list of doms" + + t = Telegram(session) + await t.message_send(f"@{sub_username} has removed you as a dom.", dom.telegram_chat_id) + + class SkipDayAddCommand(TelegramCommand): command_text = "/skip_day" @@ -53,6 +121,9 @@ class SkipDaysCommand(TelegramCommand): "\n".join([d.date.isoformat() for d in dates])) commands = [ + StartCommand(), + DomAddCommand(), + DomRemoveCommand(), SkipDayAddCommand(), SkipDayDeleteCommand(), SkipDaysCommand() diff --git a/telegram/telegram.py b/telegram/telegram.py index 0a3c259..da922ca 100644 --- a/telegram/telegram.py +++ b/telegram/telegram.py @@ -1,7 +1,7 @@ import logging import asyncio -from settings import TELEGRAM_API_TOKEN, TELEGRAM_CHAT_ID, TELEGRAM_COMMAND_TIMEOUT +from settings import ENV, TELEGRAM_API_TOKEN, TELEGRAM_CHAT_ID, TELEGRAM_COMMAND_TIMEOUT from util import make_session logger = logging.getLogger(__name__) @@ -39,10 +39,16 @@ class Telegram: return await response.json() - async def message_send(self, text): + async def message_send(self, text, chat_id=None): + chat_id_actual = chat_id if chat_id != None else TELEGRAM_CHAT_ID + text_actual = text + if ENV == 'dev' and chat_id != TELEGRAM_CHAT_ID: + text_actual = f"⚠️ Message intended for chat id {chat_id}\n\n" + text + chat_id_actual = TELEGRAM_CHAT_ID + data = { - 'chat_id': TELEGRAM_CHAT_ID, - 'text': text + 'chat_id': chat_id_actual, + 'text': text_actual } return await self.post('sendMessage', data=data) @@ -120,14 +126,14 @@ async def handle_commands(commands=[], loop=None): session, forResponse=forResponse ): - await t.message_send(reply) + await t.message_send(reply, chat_id) except TimeoutError: if chat_id in command_futures: del command_futures[chat_id] - await t.message_send("Your command has timed out") + await t.message_send("Your command has timed out", chat_id) except Exception: - await t.message_send('There was a problem with your command') + await t.message_send('There was a problem with your command', chat_id) logger.exception('Problem while executing a command') task = asyncio.create_task(