Compare commits
18 Commits
1a3d2f0b14
...
main
Author | SHA1 | Date | |
---|---|---|---|
3525ea42e1 | |||
f1db0f62fc | |||
fd5f5a7e7a | |||
fc2fe0a396 | |||
292db8133d | |||
febdfaf355 | |||
9702e1e77a | |||
ff5e7f310a | |||
d7f4540dcd | |||
97a1ab1b2b | |||
43cfb49cd6 | |||
133af80aad | |||
59d1dc4afb | |||
7577e3afee | |||
ad70870d8e | |||
a774d0a0fc | |||
512b3b05d2 | |||
0c4224314b |
@@ -1,7 +1,7 @@
|
|||||||
# Copyright 2022 - c0de <c0de@c0de.dev>
|
# Copyright 2022 - c0de <c0de@c0de.dev>
|
||||||
# Licensed under the MIT License (https://opensource.org/licenses/MIT)
|
# Licensed under the MIT License (https://opensource.org/licenses/MIT)
|
||||||
|
|
||||||
# Build with: docker build -t ghotballbot:<version> .
|
# Build with: docker build -t baseballbot:<version> .
|
||||||
# Run with: docker run -it
|
# Run with: docker run -it
|
||||||
|
|
||||||
FROM python:3.10-alpine3.16 AS build
|
FROM python:3.10-alpine3.16 AS build
|
||||||
@@ -13,6 +13,6 @@ COPY . .
|
|||||||
FROM build AS run
|
FROM build AS run
|
||||||
|
|
||||||
ENV discord_token ""
|
ENV discord_token ""
|
||||||
ENV database_path "/tmp/ghostball.db"
|
ENV database_path "/tmp/baseball.db"
|
||||||
|
|
||||||
CMD ["python", "/app/main.py"]
|
CMD ["python", "-u", "/app/main.py"]
|
341
Pipfile.lock
generated
341
Pipfile.lock
generated
@@ -119,11 +119,11 @@
|
|||||||
},
|
},
|
||||||
"astroid": {
|
"astroid": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:1c00a14f5a3ed0339d38d2e2e5b74ea2591df5861c0936bb292b84ccf3a78d83",
|
"sha256:10e0ad5f7b79c435179d0d0f0df69998c4eef4597534aae44910db060baeb907",
|
||||||
"sha256:72702205200b2a638358369d90c222d74ebc376787af8fb2f7f2a86f7b5cc85f"
|
"sha256:1493fe8bd3dfd73dc35bd53c9d5b6e49ead98497c47b2307662556a5692d29d7"
|
||||||
],
|
],
|
||||||
"markers": "python_full_version >= '3.7.2'",
|
"markers": "python_full_version >= '3.7.2'",
|
||||||
"version": "==2.12.12"
|
"version": "==2.12.13"
|
||||||
},
|
},
|
||||||
"async-timeout": {
|
"async-timeout": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@@ -143,30 +143,21 @@
|
|||||||
},
|
},
|
||||||
"black": {
|
"black": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7",
|
"sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320",
|
||||||
"sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6",
|
"sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351",
|
||||||
"sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650",
|
"sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350",
|
||||||
"sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb",
|
"sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f",
|
||||||
"sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d",
|
"sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf",
|
||||||
"sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d",
|
"sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148",
|
||||||
"sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de",
|
"sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4",
|
||||||
"sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395",
|
"sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d",
|
||||||
"sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae",
|
"sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc",
|
||||||
"sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa",
|
"sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d",
|
||||||
"sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef",
|
"sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2",
|
||||||
"sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383",
|
"sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"
|
||||||
"sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66",
|
|
||||||
"sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87",
|
|
||||||
"sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d",
|
|
||||||
"sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0",
|
|
||||||
"sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b",
|
|
||||||
"sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458",
|
|
||||||
"sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4",
|
|
||||||
"sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1",
|
|
||||||
"sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff"
|
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==22.10.0"
|
"version": "==22.12.0"
|
||||||
},
|
},
|
||||||
"charset-normalizer": {
|
"charset-normalizer": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@@ -194,19 +185,19 @@
|
|||||||
},
|
},
|
||||||
"discord": {
|
"discord": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:b6df1dd56c19750b3cb9b69de85bf463e712a0db232546ae8109c04bf0a61083",
|
"sha256:3f479fcab569c621528c0190092d6383b4da13ec9631711ce3c14f33aedff4ff",
|
||||||
"sha256:ffc714978d338d2b506e4924d66d7d02a649378a46743e2bdf42ef1bd43d1a67"
|
"sha256:44515e6d02e61528b2a81e511e03b3f60ce0b3737ba9efc69c2defce2f1ebc1d"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==2.0.0"
|
"version": "==2.1.0"
|
||||||
},
|
},
|
||||||
"discord.py": {
|
"discord.py": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:309146476e986cb8faf038cd5d604d4b3834ef15c2d34df697ce5064bf5cd779",
|
"sha256:027ccdd22b5bb66a9e19cbd8daa1bc74b49271a16a074d57e52f288fcfa208e8",
|
||||||
"sha256:aeb186348bf011708b085b2715cf92bbb72c692eb4f59c4c0b488130cc4c4b7e"
|
"sha256:a2cfa9f09e3013aaaa43600cc8dfaf67c532dd34afcb71e550f5a0dc9133a5e0"
|
||||||
],
|
],
|
||||||
"markers": "python_full_version >= '3.8.0'",
|
"markers": "python_full_version >= '3.8.0'",
|
||||||
"version": "==2.0.1"
|
"version": "==2.1.0"
|
||||||
},
|
},
|
||||||
"frozenlist": {
|
"frozenlist": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@@ -339,68 +330,83 @@
|
|||||||
},
|
},
|
||||||
"multidict": {
|
"multidict": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60",
|
"sha256:018c8e3be7f161a12b3e41741b6721f9baeb2210f4ab25a6359b7d76c1017dce",
|
||||||
"sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c",
|
"sha256:01b456046a05ff7cceefb0e1d2a9d32f05efcb1c7e0d152446304e11557639ce",
|
||||||
"sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672",
|
"sha256:114a4ab3e5cfbc56c4b6697686ecb92376c7e8c56893ef20547921552f8bdf57",
|
||||||
"sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51",
|
"sha256:12e0d396faa6dc55ff5379eee54d1df3b508243ff15bfc8295a6ec7a4483a335",
|
||||||
"sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032",
|
"sha256:190626ced82d4cc567a09e7346340d380154a493bac6905e0095d8158cdf1e38",
|
||||||
"sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2",
|
"sha256:1f5d5129a937af4e3c4a1d6c139f4051b7d17d43276cefdd8d442a7031f7eef2",
|
||||||
"sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b",
|
"sha256:21e1ce0b187c4e93112304dcde2aa18922fdbe8fb4f13d8aa72a5657bce0563a",
|
||||||
"sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80",
|
"sha256:24e8d513bfcaadc1f8b0ebece3ff50961951c54b07d5a775008a882966102418",
|
||||||
"sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88",
|
"sha256:2523a29006c034687eccd3ee70093a697129a3ffe8732535d3b2df6a4ecc279d",
|
||||||
"sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a",
|
"sha256:26fbbe17f8a7211b623502d2bf41022a51da3025142401417c765bf9a56fed4c",
|
||||||
"sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d",
|
"sha256:2b66d61966b12e6bba500e5cbb2c721a35e119c30ee02495c5629bd0e91eea30",
|
||||||
"sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389",
|
"sha256:2cf5d19e12eff855aa198259c0b02fd3f5d07e1291fbd20279c37b3b0e6c9852",
|
||||||
"sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c",
|
"sha256:2cfda34b7cb99eacada2072e0f69c0ad3285cb6f8e480b11f2b6d6c1c6f92718",
|
||||||
"sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9",
|
"sha256:3541882266247c7cd3dba78d6ef28dbe704774df60c9e4231edaa4493522e614",
|
||||||
"sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c",
|
"sha256:36df958b15639e40472adaa4f0c2c7828fe680f894a6b48c4ce229f59a6a798b",
|
||||||
"sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516",
|
"sha256:38d394814b39be1c36ac709006d39d50d72a884f9551acd9c8cc1ffae3fc8c4e",
|
||||||
"sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b",
|
"sha256:4159fc1ec9ede8ab93382e0d6ba9b1b3d23c72da39a834db7a116986605c7ab4",
|
||||||
"sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43",
|
"sha256:445c0851a1cbc1f2ec3b40bc22f9c4a235edb3c9a0906122a9df6ea8d51f886c",
|
||||||
"sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee",
|
"sha256:47defc0218682281a52fb1f6346ebb8b68b17538163a89ea24dfe4da37a8a9a3",
|
||||||
"sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227",
|
"sha256:4cc5c8cd205a9810d16a5cd428cd81bac554ad1477cb87f4ad722b10992e794d",
|
||||||
"sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d",
|
"sha256:4ccf55f28066b4f08666764a957c2b7c241c7547b0921d69c7ceab5f74fe1a45",
|
||||||
"sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae",
|
"sha256:4fb3fe591956d8841882c463f934c9f7485cfd5f763a08c0d467b513dc18ef89",
|
||||||
"sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7",
|
"sha256:526f8397fc124674b8f39748680a0ff673bd6a715fecb4866716d36e380f015f",
|
||||||
"sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4",
|
"sha256:578bfcb16f4b8675ef71b960c00f174b0426e0eeb796bab6737389d8288eb827",
|
||||||
"sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9",
|
"sha256:5b51969503709415a35754954c2763f536a70b8bf7360322b2edb0c0a44391f6",
|
||||||
"sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f",
|
"sha256:5e58ec0375803526d395f6f7e730ecc45d06e15f68f7b9cdbf644a2918324e51",
|
||||||
"sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013",
|
"sha256:62db44727d0befea68e8ad2881bb87a9cfb6b87d45dd78609009627167f37b69",
|
||||||
"sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9",
|
"sha256:67090b17a0a5be5704fd109f231ee73cefb1b3802d41288d6378b5df46ae89ba",
|
||||||
"sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e",
|
"sha256:6cd14e61f0da2a2cfb9fe05bfced2a1ed7063ce46a7a8cd473be4973de9a7f91",
|
||||||
"sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693",
|
"sha256:70740c2bc9ab1c99f7cdcb104f27d16c63860c56d51c5bf0ef82fc1d892a2131",
|
||||||
"sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a",
|
"sha256:73009ea04205966d47e16d98686ac5c438af23a1bb30b48a2c5da3423ec9ce37",
|
||||||
"sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15",
|
"sha256:791458a1f7d1b4ab3bd9e93e0dcd1d59ef7ee9aa051dcd1ea030e62e49b923fd",
|
||||||
"sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb",
|
"sha256:7f9511e48bde6b995825e8d35e434fc96296cf07a25f4aae24ff9162be7eaa46",
|
||||||
"sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96",
|
"sha256:81c3d597591b0940e04949e4e4f79359b2d2e542a686ba0da5e25de33fec13e0",
|
||||||
"sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87",
|
"sha256:8230a39bae6c2e8a09e4da6bace5064693b00590a4a213e38f9a9366da10e7dd",
|
||||||
"sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376",
|
"sha256:8b92a9f3ab904397a33b193000dc4de7318ea175c4c460a1e154c415f9008e3d",
|
||||||
"sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658",
|
"sha256:94cbe5535ef150546b8321aebea22862a3284da51e7b55f6f95b7d73e96d90ee",
|
||||||
"sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0",
|
"sha256:960ce1b790952916e682093788696ef7e33ac6a97482f9b983abdc293091b531",
|
||||||
"sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071",
|
"sha256:99341ca1f1db9e7f47914cb2461305665a662383765ced6f843712564766956d",
|
||||||
"sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360",
|
"sha256:9aac6881454a750554ed4b280a839dcf9e2133a9d12ab4d417d673fb102289b7",
|
||||||
"sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc",
|
"sha256:9d359b0a962e052b713647ac1f13eabf2263167b149ed1e27d5c579f5c8c7d2c",
|
||||||
"sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3",
|
"sha256:9dbab2a7e9c073bc9538824a01f5ed689194db7f55f2b8102766873e906a6c1a",
|
||||||
"sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba",
|
"sha256:a27b029caa3b555a4f3da54bc1e718eb55fcf1a11fda8bf0132147b476cf4c08",
|
||||||
"sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8",
|
"sha256:a8b817d4ed68fd568ec5e45dd75ddf30cc72a47a6b41b74d5bb211374c296f5e",
|
||||||
"sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9",
|
"sha256:ad7d66422b9cc51125509229693d27e18c08f2dea3ac9de408d821932b1b3759",
|
||||||
"sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2",
|
"sha256:b46e79a9f4db53897d17bc64a39d1c7c2be3e3d4f8dba6d6730a2b13ddf0f986",
|
||||||
"sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3",
|
"sha256:baa96a3418e27d723064854143b2f414a422c84cc87285a71558722049bebc5a",
|
||||||
"sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68",
|
"sha256:beeca903e4270b4afcd114f371a9602240dc143f9e944edfea00f8d4ad56c40d",
|
||||||
"sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8",
|
"sha256:c2a1168e5aa7c72499fb03c850e0f03f624fa4a5c8d2e215c518d0a73872eb64",
|
||||||
"sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d",
|
"sha256:c5790cc603456b6dcf8a9a4765f666895a6afddc88b3d3ba7b53dea2b6e23116",
|
||||||
"sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49",
|
"sha256:cb4a08f0aaaa869f189ffea0e17b86ad0237b51116d494da15ef7991ee6ad2d7",
|
||||||
"sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608",
|
"sha256:cd5771e8ea325f85cbb361ddbdeb9ae424a68e5dfb6eea786afdcd22e68a7d5d",
|
||||||
"sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57",
|
"sha256:ce8e51774eb03844588d3c279adb94efcd0edeccd2f97516623292445bcc01f9",
|
||||||
"sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86",
|
"sha256:d09daf5c6ce7fc6ed444c9339bbde5ea84e2534d1ca1cd37b60f365c77f00dea",
|
||||||
"sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20",
|
"sha256:d0e798b072cf2aab9daceb43d97c9c527a0c7593e67a7846ad4cc6051de1e303",
|
||||||
"sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293",
|
"sha256:d325d61cac602976a5d47b19eaa7d04e3daf4efce2164c630219885087234102",
|
||||||
"sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849",
|
"sha256:d408172519049e36fb6d29672f060dc8461fc7174eba9883c7026041ef9bfb38",
|
||||||
"sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937",
|
"sha256:d52442e7c951e4c9ee591d6047706e66923d248d83958bbf99b8b19515fffaef",
|
||||||
"sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"
|
"sha256:dc4cfef5d899f5f1a15f3d2ac49f71107a01a5a2745b4dd53fa0cede1419385a",
|
||||||
|
"sha256:df7b4cee3ff31b3335aba602f8d70dbc641e5b7164b1e9565570c9d3c536a438",
|
||||||
|
"sha256:e068dfeadbce63072b2d8096486713d04db4946aad0a0f849bd4fc300799d0d3",
|
||||||
|
"sha256:e07c24018986fb00d6e7eafca8fcd6e05095649e17fcf0e33a592caaa62a78b9",
|
||||||
|
"sha256:e0bce9f7c30e7e3a9e683f670314c0144e8d34be6b7019e40604763bd278d84f",
|
||||||
|
"sha256:e1925f78a543b94c3d46274c66a366fee8a263747060220ed0188e5f3eeea1c0",
|
||||||
|
"sha256:e322c94596054352f5a02771eec71563c018b15699b961aba14d6dd943367022",
|
||||||
|
"sha256:e4a095e18847c12ec20e55326ab8782d9c2d599400a3a2f174fab4796875d0e2",
|
||||||
|
"sha256:e5a811aab1b4aea0b4be669363c19847a8c547510f0e18fb632956369fdbdf67",
|
||||||
|
"sha256:eddf604a3de2ace3d9a4e4d491be7562a1ac095a0a1c95a9ec5781ef0273ef11",
|
||||||
|
"sha256:ee9b1cae9a6c5d023e5a150f6f6b9dbb3c3bbc7887d6ee07d4c0ecb49a473734",
|
||||||
|
"sha256:f1650ea41c408755da5eed52ac6ccbc8938ccc3e698d81e6f6a1be02ff2a0945",
|
||||||
|
"sha256:f2c0957b3e8c66c10d27272709a5299ab3670a0f187c9428f3b90d267119aedb",
|
||||||
|
"sha256:f76109387e1ec8d8e2137c94c437b89fe002f29e0881aae8ae45529bdff92000",
|
||||||
|
"sha256:f8a728511c977df6f3d8af388fcb157e49f11db4a6637dd60131b8b6e40b0253",
|
||||||
|
"sha256:fb6c3dc3d65014d2c782f5acf0b3ba14e639c6c33d3ed8932ead76b9080b3544"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version >= '3.7'",
|
||||||
"version": "==6.0.2"
|
"version": "==6.0.3"
|
||||||
},
|
},
|
||||||
"mypy-extensions": {
|
"mypy-extensions": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@@ -411,11 +417,11 @@
|
|||||||
},
|
},
|
||||||
"pathspec": {
|
"pathspec": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93",
|
"sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6",
|
||||||
"sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"
|
"sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version >= '3.7'",
|
||||||
"version": "==0.10.1"
|
"version": "==0.10.3"
|
||||||
},
|
},
|
||||||
"peewee": {
|
"peewee": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@@ -426,19 +432,19 @@
|
|||||||
},
|
},
|
||||||
"platformdirs": {
|
"platformdirs": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:0cb405749187a194f444c25c82ef7225232f11564721eabffc6ec70df83b11cb",
|
"sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca",
|
||||||
"sha256:6e52c21afff35cb659c6e52d8b4d61b9bd544557180440538f255d9382c8cbe0"
|
"sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version >= '3.7'",
|
||||||
"version": "==2.5.3"
|
"version": "==2.6.0"
|
||||||
},
|
},
|
||||||
"pylint": {
|
"pylint": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:3b120505e5af1d06a5ad76b55d8660d44bf0f2fc3c59c2bdd94e39188ee3a4df",
|
"sha256:ea82cd6a1e11062dc86d555d07c021b0fb65afe39becbe6fe692efd6c4a67443",
|
||||||
"sha256:c2108037eb074334d9e874dc3c783752cc03d0796c88c9a9af282d0f161a1004"
|
"sha256:ec4a87c33da054ab86a6c79afa6771dc8765cb5631620053e727fcf3ef8cbed7"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==2.15.5"
|
"version": "==2.15.8"
|
||||||
},
|
},
|
||||||
"tomli": {
|
"tomli": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@@ -528,68 +534,83 @@
|
|||||||
},
|
},
|
||||||
"yarl": {
|
"yarl": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:076eede537ab978b605f41db79a56cad2e7efeea2aa6e0fa8f05a26c24a034fb",
|
"sha256:009a028127e0a1755c38b03244c0bea9d5565630db9c4cf9572496e947137a87",
|
||||||
"sha256:07b21e274de4c637f3e3b7104694e53260b5fc10d51fb3ec5fed1da8e0f754e3",
|
"sha256:0414fd91ce0b763d4eadb4456795b307a71524dbacd015c657bb2a39db2eab89",
|
||||||
"sha256:0ab5a138211c1c366404d912824bdcf5545ccba5b3ff52c42c4af4cbdc2c5035",
|
"sha256:0978f29222e649c351b173da2b9b4665ad1feb8d1daa9d971eb90df08702668a",
|
||||||
"sha256:0c03f456522d1ec815893d85fccb5def01ffaa74c1b16ff30f8aaa03eb21e453",
|
"sha256:0ef8fb25e52663a1c85d608f6dd72e19bd390e2ecaf29c17fb08f730226e3a08",
|
||||||
"sha256:12768232751689c1a89b0376a96a32bc7633c08da45ad985d0c49ede691f5c0d",
|
"sha256:10b08293cda921157f1e7c2790999d903b3fd28cd5c208cf8826b3b508026996",
|
||||||
"sha256:19cd801d6f983918a3f3a39f3a45b553c015c5aac92ccd1fac619bd74beece4a",
|
"sha256:1684a9bd9077e922300ecd48003ddae7a7474e0412bea38d4631443a91d61077",
|
||||||
"sha256:1ca7e596c55bd675432b11320b4eacc62310c2145d6801a1f8e9ad160685a231",
|
"sha256:1b372aad2b5f81db66ee7ec085cbad72c4da660d994e8e590c997e9b01e44901",
|
||||||
"sha256:1e4808f996ca39a6463f45182e2af2fae55e2560be586d447ce8016f389f626f",
|
"sha256:1e21fb44e1eff06dd6ef971d4bdc611807d6bd3691223d9c01a18cec3677939e",
|
||||||
"sha256:205904cffd69ae972a1707a1bd3ea7cded594b1d773a0ce66714edf17833cdae",
|
"sha256:2305517e332a862ef75be8fad3606ea10108662bc6fe08509d5ca99503ac2aee",
|
||||||
"sha256:20df6ff4089bc86e4a66e3b1380460f864df3dd9dccaf88d6b3385d24405893b",
|
"sha256:24ad1d10c9db1953291f56b5fe76203977f1ed05f82d09ec97acb623a7976574",
|
||||||
"sha256:21ac44b763e0eec15746a3d440f5e09ad2ecc8b5f6dcd3ea8cb4773d6d4703e3",
|
"sha256:272b4f1599f1b621bf2aabe4e5b54f39a933971f4e7c9aa311d6d7dc06965165",
|
||||||
"sha256:29e256649f42771829974e742061c3501cc50cf16e63f91ed8d1bf98242e5507",
|
"sha256:2a1fca9588f360036242f379bfea2b8b44cae2721859b1c56d033adfd5893634",
|
||||||
"sha256:2d800b9c2eaf0684c08be5f50e52bfa2aa920e7163c2ea43f4f431e829b4f0fd",
|
"sha256:2b4fa2606adf392051d990c3b3877d768771adc3faf2e117b9de7eb977741229",
|
||||||
"sha256:2d93a049d29df172f48bcb09acf9226318e712ce67374f893b460b42cc1380ae",
|
"sha256:3150078118f62371375e1e69b13b48288e44f6691c1069340081c3fd12c94d5b",
|
||||||
"sha256:31a9a04ecccd6b03e2b0e12e82131f1488dea5555a13a4d32f064e22a6003cfe",
|
"sha256:326dd1d3caf910cd26a26ccbfb84c03b608ba32499b5d6eeb09252c920bcbe4f",
|
||||||
"sha256:3d1a50e461615747dd93c099f297c1994d472b0f4d2db8a64e55b1edf704ec1c",
|
"sha256:34c09b43bd538bf6c4b891ecce94b6fa4f1f10663a8d4ca589a079a5018f6ed7",
|
||||||
"sha256:449c957ffc6bc2309e1fbe67ab7d2c1efca89d3f4912baeb8ead207bb3cc1cd4",
|
"sha256:388a45dc77198b2460eac0aca1efd6a7c09e976ee768b0d5109173e521a19daf",
|
||||||
"sha256:4a88510731cd8d4befaba5fbd734a7dd914de5ab8132a5b3dde0bbd6c9476c64",
|
"sha256:3adeef150d528ded2a8e734ebf9ae2e658f4c49bf413f5f157a470e17a4a2e89",
|
||||||
"sha256:4c322cbaa4ed78a8aac89b2174a6df398faf50e5fc12c4c191c40c59d5e28357",
|
"sha256:3edac5d74bb3209c418805bda77f973117836e1de7c000e9755e572c1f7850d0",
|
||||||
"sha256:5395da939ffa959974577eff2cbfc24b004a2fb6c346918f39966a5786874e54",
|
"sha256:3f6b4aca43b602ba0f1459de647af954769919c4714706be36af670a5f44c9c1",
|
||||||
"sha256:5587bba41399854703212b87071c6d8638fa6e61656385875f8c6dff92b2e461",
|
"sha256:3fc056e35fa6fba63248d93ff6e672c096f95f7836938241ebc8260e062832fe",
|
||||||
"sha256:56c11efb0a89700987d05597b08a1efcd78d74c52febe530126785e1b1a285f4",
|
"sha256:418857f837347e8aaef682679f41e36c24250097f9e2f315d39bae3a99a34cbf",
|
||||||
"sha256:5999c4662631cb798496535afbd837a102859568adc67d75d2045e31ec3ac497",
|
"sha256:42430ff511571940d51e75cf42f1e4dbdded477e71c1b7a17f4da76c1da8ea76",
|
||||||
"sha256:59ddd85a1214862ce7c7c66457f05543b6a275b70a65de366030d56159a979f0",
|
"sha256:44ceac0450e648de86da8e42674f9b7077d763ea80c8ceb9d1c3e41f0f0a9951",
|
||||||
"sha256:6347f1a58e658b97b0a0d1ff7658a03cb79bdbda0331603bed24dd7054a6dea1",
|
"sha256:47d49ac96156f0928f002e2424299b2c91d9db73e08c4cd6742923a086f1c863",
|
||||||
"sha256:6628d750041550c5d9da50bb40b5cf28a2e63b9388bac10fedd4f19236ef4957",
|
"sha256:48dd18adcf98ea9cd721a25313aef49d70d413a999d7d89df44f469edfb38a06",
|
||||||
"sha256:6afb336e23a793cd3b6476c30f030a0d4c7539cd81649683b5e0c1b0ab0bf350",
|
"sha256:49d43402c6e3013ad0978602bf6bf5328535c48d192304b91b97a3c6790b1562",
|
||||||
"sha256:6c8148e0b52bf9535c40c48faebb00cb294ee577ca069d21bd5c48d302a83780",
|
"sha256:4d04acba75c72e6eb90745447d69f84e6c9056390f7a9724605ca9c56b4afcc6",
|
||||||
"sha256:76577f13333b4fe345c3704811ac7509b31499132ff0181f25ee26619de2c843",
|
"sha256:57a7c87927a468e5a1dc60c17caf9597161d66457a34273ab1760219953f7f4c",
|
||||||
"sha256:7c0da7e44d0c9108d8b98469338705e07f4bb7dab96dbd8fa4e91b337db42548",
|
"sha256:58a3c13d1c3005dbbac5c9f0d3210b60220a65a999b1833aa46bd6677c69b08e",
|
||||||
"sha256:7de89c8456525650ffa2bb56a3eee6af891e98f498babd43ae307bd42dca98f6",
|
"sha256:5df5e3d04101c1e5c3b1d69710b0574171cc02fddc4b23d1b2813e75f35a30b1",
|
||||||
"sha256:7ec362167e2c9fd178f82f252b6d97669d7245695dc057ee182118042026da40",
|
"sha256:63243b21c6e28ec2375f932a10ce7eda65139b5b854c0f6b82ed945ba526bff3",
|
||||||
"sha256:7fce6cbc6c170ede0221cc8c91b285f7f3c8b9fe28283b51885ff621bbe0f8ee",
|
"sha256:64dd68a92cab699a233641f5929a40f02a4ede8c009068ca8aa1fe87b8c20ae3",
|
||||||
"sha256:85cba594433915d5c9a0d14b24cfba0339f57a2fff203a5d4fd070e593307d0b",
|
"sha256:6604711362f2dbf7160df21c416f81fac0de6dbcf0b5445a2ef25478ecc4c778",
|
||||||
"sha256:8b0af1cf36b93cee99a31a545fe91d08223e64390c5ecc5e94c39511832a4bb6",
|
"sha256:6c4fcfa71e2c6a3cb568cf81aadc12768b9995323186a10827beccf5fa23d4f8",
|
||||||
"sha256:9130ddf1ae9978abe63808b6b60a897e41fccb834408cde79522feb37fb72fb0",
|
"sha256:6d88056a04860a98341a0cf53e950e3ac9f4e51d1b6f61a53b0609df342cc8b2",
|
||||||
"sha256:99449cd5366fe4608e7226c6cae80873296dfa0cde45d9b498fefa1de315a09e",
|
"sha256:705227dccbe96ab02c7cb2c43e1228e2826e7ead880bb19ec94ef279e9555b5b",
|
||||||
"sha256:9de955d98e02fab288c7718662afb33aab64212ecb368c5dc866d9a57bf48880",
|
"sha256:728be34f70a190566d20aa13dc1f01dc44b6aa74580e10a3fb159691bc76909d",
|
||||||
"sha256:a0fb2cb4204ddb456a8e32381f9a90000429489a25f64e817e6ff94879d432fc",
|
"sha256:74dece2bfc60f0f70907c34b857ee98f2c6dd0f75185db133770cd67300d505f",
|
||||||
"sha256:a165442348c211b5dea67c0206fc61366212d7082ba8118c8c5c1c853ea4d82e",
|
"sha256:75c16b2a900b3536dfc7014905a128a2bea8fb01f9ee26d2d7d8db0a08e7cb2c",
|
||||||
"sha256:ab2a60d57ca88e1d4ca34a10e9fb4ab2ac5ad315543351de3a612bbb0560bead",
|
"sha256:77e913b846a6b9c5f767b14dc1e759e5aff05502fe73079f6f4176359d832581",
|
||||||
"sha256:abc06b97407868ef38f3d172762f4069323de52f2b70d133d096a48d72215d28",
|
"sha256:7a66c506ec67eb3159eea5096acd05f5e788ceec7b96087d30c7d2865a243918",
|
||||||
"sha256:af887845b8c2e060eb5605ff72b6f2dd2aab7a761379373fd89d314f4752abbf",
|
"sha256:8c46d3d89902c393a1d1e243ac847e0442d0196bbd81aecc94fcebbc2fd5857c",
|
||||||
"sha256:b19255dde4b4f4c32e012038f2c169bb72e7f081552bea4641cab4d88bc409dd",
|
"sha256:93202666046d9edadfe9f2e7bf5e0782ea0d497b6d63da322e541665d65a044e",
|
||||||
"sha256:b3ded839a5c5608eec8b6f9ae9a62cb22cd037ea97c627f38ae0841a48f09eae",
|
"sha256:97209cc91189b48e7cfe777237c04af8e7cc51eb369004e061809bcdf4e55220",
|
||||||
"sha256:c1445a0c562ed561d06d8cbc5c8916c6008a31c60bc3655cdd2de1d3bf5174a0",
|
"sha256:a48f4f7fea9a51098b02209d90297ac324241bf37ff6be6d2b0149ab2bd51b37",
|
||||||
"sha256:d0272228fabe78ce00a3365ffffd6f643f57a91043e119c289aaba202f4095b0",
|
"sha256:a783cd344113cb88c5ff7ca32f1f16532a6f2142185147822187913eb989f739",
|
||||||
"sha256:d0b51530877d3ad7a8d47b2fff0c8df3b8f3b8deddf057379ba50b13df2a5eae",
|
"sha256:ae0eec05ab49e91a78700761777f284c2df119376e391db42c38ab46fd662b77",
|
||||||
"sha256:d0f77539733e0ec2475ddcd4e26777d08996f8cd55d2aef82ec4d3896687abda",
|
"sha256:ae4d7ff1049f36accde9e1ef7301912a751e5bae0a9d142459646114c70ecba6",
|
||||||
"sha256:d2b8f245dad9e331540c350285910b20dd913dc86d4ee410c11d48523c4fd546",
|
"sha256:b05df9ea7496df11b710081bd90ecc3a3db6adb4fee36f6a411e7bc91a18aa42",
|
||||||
"sha256:dd032e8422a52e5a4860e062eb84ac94ea08861d334a4bcaf142a63ce8ad4802",
|
"sha256:baf211dcad448a87a0d9047dc8282d7de59473ade7d7fdf22150b1d23859f946",
|
||||||
"sha256:de49d77e968de6626ba7ef4472323f9d2e5a56c1d85b7c0e2a190b2173d3b9be",
|
"sha256:bb81f753c815f6b8e2ddd2eef3c855cf7da193b82396ac013c661aaa6cc6b0a5",
|
||||||
"sha256:de839c3a1826a909fdbfe05f6fe2167c4ab033f1133757b5936efe2f84904c07",
|
"sha256:bcd7bb1e5c45274af9a1dd7494d3c52b2be5e6bd8d7e49c612705fd45420b12d",
|
||||||
"sha256:e80ed5a9939ceb6fda42811542f31c8602be336b1fb977bccb012e83da7e4936",
|
"sha256:bf071f797aec5b96abfc735ab97da9fd8f8768b43ce2abd85356a3127909d146",
|
||||||
"sha256:ea30a42dc94d42f2ba4d0f7c0ffb4f4f9baa1b23045910c0c32df9c9902cb272",
|
"sha256:c15163b6125db87c8f53c98baa5e785782078fbd2dbeaa04c6141935eb6dab7a",
|
||||||
"sha256:ea513a25976d21733bff523e0ca836ef1679630ef4ad22d46987d04b372d57fc",
|
"sha256:cb6d48d80a41f68de41212f3dfd1a9d9898d7841c8f7ce6696cf2fd9cb57ef83",
|
||||||
"sha256:ed19b74e81b10b592084a5ad1e70f845f0aacb57577018d31de064e71ffa267a",
|
"sha256:ceff9722e0df2e0a9e8a79c610842004fa54e5b309fe6d218e47cd52f791d7ef",
|
||||||
"sha256:f5af52738e225fcc526ae64071b7e5342abe03f42e0e8918227b38c9aa711e28",
|
"sha256:cfa2bbca929aa742b5084fd4663dd4b87c191c844326fcb21c3afd2d11497f80",
|
||||||
"sha256:fae37373155f5ef9b403ab48af5136ae9851151f7aacd9926251ab26b953118b"
|
"sha256:d617c241c8c3ad5c4e78a08429fa49e4b04bedfc507b34b4d8dceb83b4af3588",
|
||||||
|
"sha256:d881d152ae0007809c2c02e22aa534e702f12071e6b285e90945aa3c376463c5",
|
||||||
|
"sha256:da65c3f263729e47351261351b8679c6429151ef9649bba08ef2528ff2c423b2",
|
||||||
|
"sha256:de986979bbd87272fe557e0a8fcb66fd40ae2ddfe28a8b1ce4eae22681728fef",
|
||||||
|
"sha256:df60a94d332158b444301c7f569659c926168e4d4aad2cfbf4bce0e8fb8be826",
|
||||||
|
"sha256:dfef7350ee369197106805e193d420b75467b6cceac646ea5ed3049fcc950a05",
|
||||||
|
"sha256:e59399dda559688461762800d7fb34d9e8a6a7444fd76ec33220a926c8be1516",
|
||||||
|
"sha256:e6f3515aafe0209dd17fb9bdd3b4e892963370b3de781f53e1746a521fb39fc0",
|
||||||
|
"sha256:e7fd20d6576c10306dea2d6a5765f46f0ac5d6f53436217913e952d19237efc4",
|
||||||
|
"sha256:ebb78745273e51b9832ef90c0898501006670d6e059f2cdb0e999494eb1450c2",
|
||||||
|
"sha256:efff27bd8cbe1f9bd127e7894942ccc20c857aa8b5a0327874f30201e5ce83d0",
|
||||||
|
"sha256:f37db05c6051eff17bc832914fe46869f8849de5b92dc4a3466cd63095d23dfd",
|
||||||
|
"sha256:f8ca8ad414c85bbc50f49c0a106f951613dfa5f948ab69c10ce9b128d368baf8",
|
||||||
|
"sha256:fb742dcdd5eec9f26b61224c23baea46c9055cf16f62475e11b9b15dfd5c117b",
|
||||||
|
"sha256:fc77086ce244453e074e445104f0ecb27530d6fd3a46698e33f6c38951d5a0f1",
|
||||||
|
"sha256:ff205b58dc2929191f68162633d5e10e8044398d7a45265f90a0f1d51f85f72c"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version >= '3.7'",
|
||||||
"version": "==1.8.1"
|
"version": "==1.8.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"develop": {}
|
"develop": {}
|
||||||
|
@@ -9,6 +9,7 @@
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import uuid
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from peewee import (
|
from peewee import (
|
||||||
@@ -22,7 +23,7 @@ from peewee import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
# User can provide path to database, or it will be put next to main.py
|
# User can provide path to database, or it will be put next to main.py
|
||||||
DATABASE = os.environ.get("database_path", os.getcwd() + "/ghostball.db")
|
DATABASE = os.environ.get("database_path", os.getcwd() + "/baseball.db")
|
||||||
database = SqliteDatabase(DATABASE, pragmas={"foreign_keys": 1})
|
database = SqliteDatabase(DATABASE, pragmas={"foreign_keys": 1})
|
||||||
|
|
||||||
|
|
||||||
@@ -55,7 +56,7 @@ class PlayerModel(BaseModel):
|
|||||||
class GameModel(BaseModel):
|
class GameModel(BaseModel):
|
||||||
"""Games that are ran"""
|
"""Games that are ran"""
|
||||||
|
|
||||||
game_id = UUIDField(primary_key=True)
|
game_id = UUIDField(primary_key=True, default=uuid.uuid4)
|
||||||
server_id = IntegerField()
|
server_id = IntegerField()
|
||||||
|
|
||||||
pitch_value = IntegerField(null=True)
|
pitch_value = IntegerField(null=True)
|
||||||
@@ -66,7 +67,7 @@ class GameModel(BaseModel):
|
|||||||
class GuessModel(BaseModel):
|
class GuessModel(BaseModel):
|
||||||
"""Guesses for a particular game"""
|
"""Guesses for a particular game"""
|
||||||
|
|
||||||
guess_id = UUIDField(primary_key=True)
|
guess_id = UUIDField(primary_key=True, default=uuid.uuid4)
|
||||||
|
|
||||||
player = ForeignKeyField(PlayerModel, backref="guesses")
|
player = ForeignKeyField(PlayerModel, backref="guesses")
|
||||||
game = ForeignKeyField(GameModel, backref="guesses")
|
game = ForeignKeyField(GameModel, backref="guesses")
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
# pylint: disable=wrong-import-position
|
# pylint: disable=wrong-import-position
|
||||||
|
|
||||||
"""
|
"""
|
||||||
A discord bot that hosts Ghostball/Braveball.
|
A discord bot that hosts Baseball/Braveball.
|
||||||
|
|
||||||
A discord game where players guess the pitch speed
|
A discord game where players guess the pitch speed
|
||||||
from a fantasy baseball pitcher, and whoever is
|
from a fantasy baseball pitcher, and whoever is
|
||||||
@@ -21,7 +21,7 @@ sys.path.append("..")
|
|||||||
from game.manager import GameManager
|
from game.manager import GameManager
|
||||||
|
|
||||||
|
|
||||||
class GhostBallClient(discord.Client):
|
class BaseBallClient(discord.Client):
|
||||||
"""
|
"""
|
||||||
Implementation of a Discord client that will monitor
|
Implementation of a Discord client that will monitor
|
||||||
a channel for messages, and if it recieves a message
|
a channel for messages, and if it recieves a message
|
||||||
|
14
game/base.py
14
game/base.py
@@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
# pylint: disable=missing-module-docstring
|
# pylint: disable=missing-module-docstring
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
from database.models import database, GameModel as Game
|
from database.models import database, GameModel as Game
|
||||||
|
|
||||||
|
|
||||||
@@ -24,6 +26,18 @@ class BaseGameManager:
|
|||||||
# Discord client instance
|
# Discord client instance
|
||||||
self.discord = None
|
self.discord = None
|
||||||
|
|
||||||
|
logger = logging.getLogger()
|
||||||
|
console = logging.StreamHandler()
|
||||||
|
|
||||||
|
format_str = '%(asctime)s\t%(levelname)s -- %(processName)s %(filename)s:%(lineno)s -- %(message)s'
|
||||||
|
console.setFormatter(logging.Formatter(format_str))
|
||||||
|
|
||||||
|
logger.addHandler(console)
|
||||||
|
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
|
self.logger = logger
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
"""
|
"""
|
||||||
Allows use of `with Game() as game` for try/except statements
|
Allows use of `with Game() as game` for try/except statements
|
||||||
|
30
game/clear.py
Normal file
30
game/clear.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# Copyright 2022 - c0de <c0de@c0de.dev>
|
||||||
|
# Licensed under the MIT License (https://opensource.org/licenses/MIT)
|
||||||
|
|
||||||
|
# pylint: disable=missing-module-docstring,too-few-public-methods
|
||||||
|
|
||||||
|
from database.models import PlayerModel as Player
|
||||||
|
from game.base import BaseGameManager
|
||||||
|
|
||||||
|
|
||||||
|
class ClearManager(BaseGameManager):
|
||||||
|
"""Commands that run when a player clears the session leaderboard"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.commands.append(("clear", self.clear))
|
||||||
|
|
||||||
|
async def clear(self):
|
||||||
|
"""Clear command - Clears the session scoreboard"""
|
||||||
|
|
||||||
|
players = Player.select(Player.player_id, Player.total_points)
|
||||||
|
|
||||||
|
for player in players:
|
||||||
|
player.total_points = 0
|
||||||
|
|
||||||
|
Player.bulk_update(players, fields=[Player.total_points])
|
||||||
|
|
||||||
|
clear_message = "The score has been cleared!"
|
||||||
|
|
||||||
|
await self.message.channel.send(clear_message)
|
@@ -12,41 +12,20 @@ from game.process_guess import ProcessGuess
|
|||||||
|
|
||||||
|
|
||||||
class EndGameManager(BaseGameManager):
|
class EndGameManager(BaseGameManager):
|
||||||
"""Commands that run at the end of a game"""
|
"""Commands that run at the end of a play"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.commands.append(("resolve", self.stop))
|
self.commands.append(("resolve", self.stop))
|
||||||
|
|
||||||
def __stop_args__(self):
|
|
||||||
pieces = self.message.content.split()
|
|
||||||
|
|
||||||
if len(pieces) == 2:
|
|
||||||
return pieces[1], False, None, None
|
|
||||||
|
|
||||||
if len(pieces) == 4:
|
|
||||||
return pieces[1], True, pieces[2], pieces[3]
|
|
||||||
|
|
||||||
return None, False, None, None
|
|
||||||
|
|
||||||
async def update_pitch_value(self):
|
async def update_pitch_value(self):
|
||||||
"""Update game state database for closing arguments"""
|
"""Update game state database for closing arguments"""
|
||||||
# Determine arguments
|
pitch_value = self.message.content.split()[1]
|
||||||
pitch_value, has_batter, batter_id, batter_guess = self.__stop_args__()
|
|
||||||
if not pitch_value:
|
if not pitch_value:
|
||||||
return await self.message.channel.send(
|
return await self.message.channel.send(
|
||||||
f"Invalid command <@{ str(self.message.author.id) }>!"
|
f"Invalid command <@{ str(self.message.author.id) }>!"
|
||||||
)
|
)
|
||||||
|
|
||||||
if has_batter:
|
|
||||||
player_id = batter_id[3:]
|
|
||||||
Guess.create(
|
|
||||||
game_id=self.game.game_id,
|
|
||||||
player_id=player_id,
|
|
||||||
player_name=self.discord.get_user(int(player_id).name),
|
|
||||||
guess=int(batter_guess),
|
|
||||||
).save()
|
|
||||||
|
|
||||||
# Save the pitch value
|
# Save the pitch value
|
||||||
Game.update(
|
Game.update(
|
||||||
{
|
{
|
||||||
@@ -75,7 +54,7 @@ class EndGameManager(BaseGameManager):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Discard the game if there weren't enough players
|
# Discard the game if there weren't enough players
|
||||||
if guess_count < 3:
|
if guess_count < 2:
|
||||||
self.game = None
|
self.game = None
|
||||||
self.is_running = False
|
self.is_running = False
|
||||||
return await self.message.channel.send(
|
return await self.message.channel.send(
|
||||||
@@ -84,7 +63,7 @@ class EndGameManager(BaseGameManager):
|
|||||||
|
|
||||||
message = (
|
message = (
|
||||||
"Closed this play! Here are the results\n"
|
"Closed this play! Here are the results\n"
|
||||||
+ "PLAYER | GUESS | DIFFERENCE | POINTS GAINED | TOTAL POINTS\n"
|
+ "__PLAYER | GUESS | DIFFERENCE | POINTS GAINED | TOTAL POINTS__\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
pitch_value = await self.update_pitch_value()
|
pitch_value = await self.update_pitch_value()
|
||||||
|
@@ -2,9 +2,7 @@
|
|||||||
# Copyright 2022 - c0de <c0de@c0de.dev>
|
# Copyright 2022 - c0de <c0de@c0de.dev>
|
||||||
# Licensed under the MIT License (https://opensource.org/licenses/MIT)
|
# Licensed under the MIT License (https://opensource.org/licenses/MIT)
|
||||||
|
|
||||||
# pylint: disable=missing-module-docstring
|
# pylint: disable=missing-module-docstring,too-few-public-methods
|
||||||
|
|
||||||
import uuid
|
|
||||||
|
|
||||||
from database.models import PlayerModel as Player, GuessModel as Guess
|
from database.models import PlayerModel as Player, GuessModel as Guess
|
||||||
from game.base import BaseGameManager
|
from game.base import BaseGameManager
|
||||||
@@ -39,7 +37,7 @@ class GuessManager(BaseGameManager):
|
|||||||
|
|
||||||
# Create the guess (or allow us to say update successful)
|
# Create the guess (or allow us to say update successful)
|
||||||
_, created = Guess.get_or_create(
|
_, created = Guess.get_or_create(
|
||||||
guess_id=uuid.uuid4(), game_id=self.game.game_id, player_id=player.player_id
|
game_id=self.game.game_id, player_id=player.player_id
|
||||||
)
|
)
|
||||||
|
|
||||||
Guess.update({"guess": value}).where(
|
Guess.update({"guess": value}).where(
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
# Copyright 2022 - c0de <c0de@c0de.dev>
|
# Copyright 2022 - c0de <c0de@c0de.dev>
|
||||||
# Licensed under the MIT License (https://opensource.org/licenses/MIT)
|
# Licensed under the MIT License (https://opensource.org/licenses/MIT)
|
||||||
|
|
||||||
# pylint: disable=missing-module-docstring
|
# pylint: disable=missing-module-docstring,too-few-public-methods
|
||||||
|
|
||||||
from game.base import BaseGameManager
|
from game.base import BaseGameManager
|
||||||
|
|
||||||
@@ -19,13 +19,14 @@ class HelpManager(BaseGameManager):
|
|||||||
|
|
||||||
help_message = (
|
help_message = (
|
||||||
"Braveball commands\n"
|
"Braveball commands\n"
|
||||||
|
+ "ping - Will respond 'pong' if the bot is alive\n"
|
||||||
+ "!braveball - Start new game\n"
|
+ "!braveball - Start new game\n"
|
||||||
+ "!guess - While a game is running, add a guess"
|
+ "!guess - While a game is running, add a guess"
|
||||||
+ " (or update an existing one) from 1-1000\n"
|
+ " (or update an existing one) from 1-1000\n"
|
||||||
+ "!resolve <value> - 1-1000 to resolve the game\n"
|
+ "!resolve <value> - 1-1000 to resolve the game\n"
|
||||||
+ " You can also add a batter's guess with: "
|
+ "!clear - Clear the session scoreboard\n"
|
||||||
+ "!resolve <value> <discord id #> <guess>\n"
|
|
||||||
+ "!points - Shows a table of the most recent players, and their scores\n"
|
+ "!points - Shows a table of the most recent players, and their scores\n"
|
||||||
|
+ "!reset - Removes all players and total points\n"
|
||||||
+ "!help - Shows this message"
|
+ "!help - Shows this message"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -14,11 +14,13 @@ from game.new_game import NewGameManager
|
|||||||
from game.end_game import EndGameManager
|
from game.end_game import EndGameManager
|
||||||
from game.guess import GuessManager
|
from game.guess import GuessManager
|
||||||
from game.points import PointsManager
|
from game.points import PointsManager
|
||||||
|
from game.reset import ResetManager
|
||||||
from game.help import HelpManager
|
from game.help import HelpManager
|
||||||
|
from game.clear import ClearManager
|
||||||
|
|
||||||
|
|
||||||
class GameManager(
|
class GameManager(
|
||||||
NewGameManager, EndGameManager, GuessManager, PointsManager, HelpManager
|
NewGameManager, EndGameManager, GuessManager, PointsManager, ResetManager, HelpManager, ClearManager
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Represents what this bot is able to do on a channel (or DMs)
|
Represents what this bot is able to do on a channel (or DMs)
|
||||||
|
@@ -2,9 +2,7 @@
|
|||||||
# Copyright 2022 - c0de <c0de@c0de.dev>
|
# Copyright 2022 - c0de <c0de@c0de.dev>
|
||||||
# Licensed under the MIT License (https://opensource.org/licenses/MIT)
|
# Licensed under the MIT License (https://opensource.org/licenses/MIT)
|
||||||
|
|
||||||
# pylint: disable=missing-module-docstring
|
# pylint: disable=missing-module-docstring,too-few-public-methods
|
||||||
|
|
||||||
import uuid
|
|
||||||
|
|
||||||
from database.models import GameModel as Game
|
from database.models import GameModel as Game
|
||||||
from game.base import BaseGameManager
|
from game.base import BaseGameManager
|
||||||
@@ -15,7 +13,7 @@ class NewGameManager(BaseGameManager):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.commands.append(("braveball", self.start))
|
self.commands.append(("bb", self.start))
|
||||||
|
|
||||||
async def start(self):
|
async def start(self):
|
||||||
"""
|
"""
|
||||||
@@ -28,6 +26,6 @@ class NewGameManager(BaseGameManager):
|
|||||||
self.is_running = True
|
self.is_running = True
|
||||||
|
|
||||||
# game.pitch_value is unknown at the start of the game
|
# game.pitch_value is unknown at the start of the game
|
||||||
self.game = Game.create(game_id=uuid.uuid4(), server_id=self.message.channel.id)
|
self.game = Game.create(server_id=self.message.channel.id)
|
||||||
|
|
||||||
await self.message.channel.send("Send me your guesses with !guess <number>")
|
await self.message.channel.send("Send me your guesses with !guess <number>")
|
||||||
|
@@ -2,14 +2,14 @@
|
|||||||
# Copyright 2022 - c0de <c0de@c0de.dev>
|
# Copyright 2022 - c0de <c0de@c0de.dev>
|
||||||
# Licensed under the MIT License (https://opensource.org/licenses/MIT)
|
# Licensed under the MIT License (https://opensource.org/licenses/MIT)
|
||||||
|
|
||||||
# pylint: disable=not-an-iterable,missing-module-docstring
|
# pylint: disable=not-an-iterable,missing-module-docstring,too-few-public-methods
|
||||||
|
|
||||||
from database.models import PlayerModel as Player
|
from database.models import PlayerModel as Player
|
||||||
from game.base import BaseGameManager
|
from game.base import BaseGameManager
|
||||||
|
|
||||||
|
|
||||||
class PointsManager(BaseGameManager):
|
class PointsManager(BaseGameManager):
|
||||||
"""Commands that run when a player makes a guess"""
|
"""Commands that run when a player wants to view the session leaderboard"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
@@ -27,7 +27,7 @@ class PointsManager(BaseGameManager):
|
|||||||
|
|
||||||
players = Player.select(
|
players = Player.select(
|
||||||
Player.player_name, Player.total_points, Player.last_update
|
Player.player_name, Player.total_points, Player.last_update
|
||||||
).order_by(Player.last_update.desc(), Player.total_points.desc())
|
).order_by(Player.total_points.desc())
|
||||||
|
|
||||||
for player in players:
|
for player in players:
|
||||||
message += (
|
message += (
|
||||||
|
@@ -40,6 +40,7 @@ class ProcessGuess:
|
|||||||
Player.player_id,
|
Player.player_id,
|
||||||
Player.player_name,
|
Player.player_name,
|
||||||
Player.total_points,
|
Player.total_points,
|
||||||
|
Guess.difference
|
||||||
)
|
)
|
||||||
.join(Player)
|
.join(Player)
|
||||||
.where(
|
.where(
|
||||||
@@ -47,7 +48,7 @@ class ProcessGuess:
|
|||||||
& (Guess.guess > 0)
|
& (Guess.guess > 0)
|
||||||
& (Guess.player.player_id == Player.player_id)
|
& (Guess.player.player_id == Player.player_id)
|
||||||
)
|
)
|
||||||
.order_by(Guess.guess)
|
.order_by(Guess.difference)
|
||||||
)
|
)
|
||||||
return self.guesses
|
return self.guesses
|
||||||
|
|
||||||
@@ -71,13 +72,24 @@ class ProcessGuess:
|
|||||||
|
|
||||||
def get_difference(self, guess=None):
|
def get_difference(self, guess=None):
|
||||||
"""Difference calculation, includes "loop over" effect"""
|
"""Difference calculation, includes "loop over" effect"""
|
||||||
|
self.game_manager.logger.debug("get_difference")
|
||||||
|
|
||||||
|
self.game_manager.logger.debug(guess if guess else "")
|
||||||
|
|
||||||
if not guess:
|
if not guess:
|
||||||
guess = self.guess.guess
|
guess = self.guess.guess
|
||||||
|
|
||||||
|
self.game_manager.logger.debug(f"guess: {guess}")
|
||||||
|
|
||||||
difference = abs(guess - self.pitch_value)
|
difference = abs(guess - self.pitch_value)
|
||||||
|
|
||||||
|
self.game_manager.logger.debug(f"Difference:{difference}")
|
||||||
|
|
||||||
if difference > 500:
|
if difference > 500:
|
||||||
return 1000 - difference
|
difference = 1000 - difference
|
||||||
|
|
||||||
|
self.game_manager.logger.debug("Diff loop over 500")
|
||||||
|
self.game_manager.logger.debug(f"{difference}")
|
||||||
|
|
||||||
self.difference = difference
|
self.difference = difference
|
||||||
return self.difference
|
return self.difference
|
||||||
@@ -88,32 +100,51 @@ class ProcessGuess:
|
|||||||
they are (within range of 0-500) to the pitch_value
|
they are (within range of 0-500) to the pitch_value
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
self.game_manager.logger.debug("> get_difference_score")
|
||||||
|
self.game_manager.logger.debug(self.difference)
|
||||||
|
|
||||||
if self.difference == 0:
|
if self.difference == 0:
|
||||||
self.difference_score = 15
|
self.difference_score = 15
|
||||||
|
self.game_manager.logger.debug("0 Diff")
|
||||||
elif self.difference > 0 and self.difference < 21:
|
elif self.difference > 0 and self.difference < 21:
|
||||||
self.difference_score = 8
|
self.difference_score = 8
|
||||||
|
self.game_manager.logger.debug("0 to 20 diff")
|
||||||
elif self.difference > 20 and self.difference < 51:
|
elif self.difference > 20 and self.difference < 51:
|
||||||
self.difference_score = 5
|
self.difference_score = 5
|
||||||
|
self.game_manager.logger.debug("21 to 50 Diff")
|
||||||
elif self.difference > 50 and self.difference < 101:
|
elif self.difference > 50 and self.difference < 101:
|
||||||
self.difference_score = 3
|
self.difference_score = 3
|
||||||
|
self.game_manager.logger.debug("51 to 100 Diff")
|
||||||
elif self.difference > 100 and self.difference < 151:
|
elif self.difference > 100 and self.difference < 151:
|
||||||
self.difference_score = 2
|
self.difference_score = 2
|
||||||
|
self.game_manager.logger.debug("101 to 150 Diff")
|
||||||
elif self.difference > 150 and self.difference < 201:
|
elif self.difference > 150 and self.difference < 201:
|
||||||
self.difference_score = 1
|
self.difference_score = 1
|
||||||
|
self.game_manager.logger.debug("151 to 200 Diff")
|
||||||
elif self.difference > 200 and self.difference < 495:
|
elif self.difference > 200 and self.difference < 495:
|
||||||
self.difference_score = 0
|
self.difference_score = 0
|
||||||
|
self.game_manager.logger.debug("Diff too big")
|
||||||
else:
|
else:
|
||||||
self.difference_score = -5
|
self.difference_score = -5
|
||||||
|
self.game_manager.logger.debug("Big succ")
|
||||||
|
|
||||||
return self.difference_score
|
return self.difference_score
|
||||||
|
|
||||||
def get_winner_loser(self):
|
def get_winner_loser(self):
|
||||||
"""Determine which guesses are closest and furthest from the pitch_value"""
|
"""Determine which guesses are closest and furthest from the pitch_value"""
|
||||||
|
|
||||||
|
self.game_manager.logger.debug("> get_winner_loser")
|
||||||
|
|
||||||
guess_values = [record.guess for record in self.get_guesses()]
|
guess_values = [record.guess for record in self.get_guesses()]
|
||||||
|
self.game_manager.logger.debug(", ".join([str(guess) for guess in guess_values]))
|
||||||
|
|
||||||
# Closest to the pitch_value
|
# Closest to the pitch_value
|
||||||
winner = min(guess_values, key=lambda guess: self.get_difference(guess))
|
winner = min(guess_values, key=lambda guess: self.get_difference(guess))
|
||||||
|
self.game_manager.logger.debug(f"winner: {winner}")
|
||||||
|
|
||||||
# Furthest from the pitch_value
|
# Furthest from the pitch_value
|
||||||
loser = max(guess_values, key=lambda guess: self.get_difference(guess))
|
loser = max(guess_values, key=lambda guess: self.get_difference(guess))
|
||||||
|
self.game_manager.logger.debug(f"loser: {loser}")
|
||||||
|
|
||||||
return winner, loser
|
return winner, loser
|
||||||
|
|
||||||
@@ -129,6 +160,9 @@ class ProcessGuess:
|
|||||||
for guess in self.get_guesses():
|
for guess in self.get_guesses():
|
||||||
self.guess = guess
|
self.guess = guess
|
||||||
|
|
||||||
|
self.game_manager.logger.debug(f"Current guess: {guess}")
|
||||||
|
|
||||||
|
|
||||||
difference = self.get_difference()
|
difference = self.get_difference()
|
||||||
difference_score = self.get_difference_score()
|
difference_score = self.get_difference_score()
|
||||||
self.update_difference_value()
|
self.update_difference_value()
|
||||||
@@ -136,10 +170,13 @@ class ProcessGuess:
|
|||||||
|
|
||||||
self.message += f"{guess.player.player_name} | {guess.guess} | {difference} | {difference_score} | {(guess.player.total_points + difference_score)}\n"
|
self.message += f"{guess.player.player_name} | {guess.guess} | {difference} | {difference_score} | {(guess.player.total_points + difference_score)}\n"
|
||||||
|
|
||||||
|
self.game_manager.logger.debug(f"new total: {(guess.player.total_points + difference_score)}")
|
||||||
|
|
||||||
if guess.guess == winner:
|
if guess.guess == winner:
|
||||||
closest_player_id = guess.player.player_id
|
closest_player_id = guess.player.player_id
|
||||||
|
|
||||||
if guess.guess == loser:
|
if guess.guess == loser:
|
||||||
furthest_player_id = guess.player.player_id
|
furthest_player_id = guess.player.player_id
|
||||||
|
|
||||||
|
self.game_manager.logger.debug(self.message)
|
||||||
return self.message, closest_player_id, furthest_player_id
|
return self.message, closest_player_id, furthest_player_id
|
||||||
|
22
game/reset.py
Normal file
22
game/reset.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# Copyright 2022 - c0de <c0de@c0de.dev>
|
||||||
|
# Licensed under the MIT License (https://opensource.org/licenses/MIT)
|
||||||
|
|
||||||
|
# pylint: disable=missing-module-docstring,too-few-public-methods
|
||||||
|
|
||||||
|
from database.models import PlayerModel as Player
|
||||||
|
from game.base import BaseGameManager
|
||||||
|
|
||||||
|
|
||||||
|
class ResetManager(BaseGameManager):
|
||||||
|
"""Commands that run when a player asks for help"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.commands.append(("reset", self.reset))
|
||||||
|
|
||||||
|
async def reset(self):
|
||||||
|
"""Reset command purges all players (removes total points)"""
|
||||||
|
Player.delete().where(True).execute()
|
||||||
|
|
||||||
|
return await self.message.channel.send("ok")
|
4
main.py
4
main.py
@@ -7,7 +7,7 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from discord import Intents
|
from discord import Intents
|
||||||
from discord_client.client import GhostBallClient
|
from discord_client.client import BaseBallClient
|
||||||
from database.models import DATABASE, database, create_models
|
from database.models import DATABASE, database, create_models
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
@@ -17,5 +17,5 @@ if __name__ == "__main__":
|
|||||||
create_models()
|
create_models()
|
||||||
database.close()
|
database.close()
|
||||||
|
|
||||||
client = GhostBallClient(intents=Intents.all())
|
client = BaseBallClient(intents=Intents.all())
|
||||||
client.run(os.environ.get("discord_token"))
|
client.run(os.environ.get("discord_token"))
|
||||||
|
82
readme.md
82
readme.md
@@ -1,36 +1,80 @@
|
|||||||
# Discord Ghost Ball Bot
|
# Discord Baseball Bot
|
||||||
|
|
||||||
A bot that will listen on a discord channel, accpeting commands.
|
A bot that will listen on a discord channel, accpeting commands.
|
||||||
The main commands are `!start`, `!guess [int]` and `!resolve [int]`.
|
|
||||||
|
|
||||||
The integer will be between 1 and 1000, and the person with the closest guess will win points.
|
The main commands are `!braveball`, `!guess [int]` and `!resolve [int]`
|
||||||
|
Use the `!help` command for more information
|
||||||
The point scale is:
|
|
||||||
|
|
||||||
* 0-25 - 100 pts
|
|
||||||
* 26-50 - 75 pts
|
|
||||||
* 51-75 - 50 pts
|
|
||||||
* 76-100 - 25 pts
|
|
||||||
|
|
||||||
There should also be a running total for each player that can be checked with a command.
|
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
You will need a discord bot already set up and supply an auth token.
|
1. You will need a discord bot and an auth token
|
||||||
|
1. You will need access to a server that runs Docker
|
||||||
|
* For development, docker is optional. See Development section of Usage below
|
||||||
|
|
||||||
Python requirements can be installed with `pipenv install` (install pipenv with `pip3 install pipenv`)
|
## Points
|
||||||
|
|
||||||
|
Points are determined by the difference, which comes from this formula:
|
||||||
|
|
||||||
|
```python
|
||||||
|
difference = abs(guess - pitch_value)
|
||||||
|
|
||||||
|
if difference > 500:
|
||||||
|
difference = 1000 - difference
|
||||||
|
```
|
||||||
|
|
||||||
|
The point scale is a range based on the difference
|
||||||
|
|
||||||
|
| minimum | maximum | points |
|
||||||
|
|-----------------|-----------------|--------|
|
||||||
|
| (no difference) | (no difference) | 15 |
|
||||||
|
| 1 | 20 | 8 |
|
||||||
|
| 21 | 50 | 5 |
|
||||||
|
| 51 | 100 | 3 |
|
||||||
|
| 101 | 150 | 2 |
|
||||||
|
| 151 | 200 | 1 |
|
||||||
|
| 200 | 494 | 0 |
|
||||||
|
| 495 | 500 | -5 |
|
||||||
|
|
||||||
|
Points are added to a running total for each player at the end of each round.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
All of the new bot code is in the [GhostBallBot](./GhostBallBot/) folder. This documentation is for the new code.
|
If you are using docker:
|
||||||
|
|
||||||
The original code is in [src](./src/). Feel free to try to get this working.
|
1. You need to determine which version of the bot to use
|
||||||
|
* If you are using a raspberry pi, you want `archarm64`
|
||||||
|
* Otherwise, you most likely want `archx64`
|
||||||
|
|
||||||
|
### Production with docker
|
||||||
|
|
||||||
|
This docker command is the minimum required to run the bot:
|
||||||
|
|
||||||
|
`docker run -d -e discord_token="<discord token> c0defox/baseballbot:<version>"`
|
||||||
|
|
||||||
|
_Note: The above will not persist the database through restarts_
|
||||||
|
|
||||||
|
If you want to keep the database, use the following command:
|
||||||
|
|
||||||
|
`docker run -d -v database:/database -e database_path="/database/baseball.db" -e discord_token="<discord token>" c0defox/baseballbot:<version>`
|
||||||
|
|
||||||
|
### Development with docker
|
||||||
|
|
||||||
|
1. Modify the source code
|
||||||
|
1. Run `docker build -t baseballbot:<tag> .`
|
||||||
|
1. Run the same docker commands you would in production
|
||||||
|
|
||||||
|
_note: You will probably want to purge your builds after a while, as they will eventually take up space_
|
||||||
|
|
||||||
|
### Development without docker
|
||||||
|
|
||||||
|
Python requirements can be installed with `pipenv install` (install pipenv with `pip3 install pipenv`)
|
||||||
|
|
||||||
1. Install the python requirements
|
1. Install the python requirements
|
||||||
1. Add discord token to run.sh
|
1. Add discord token to run.sh
|
||||||
1. Execute run.sh
|
1. Modify the source code
|
||||||
1. Bot should then connect to discord and start responding to commands defined in game.py
|
1. Start run.sh in the terminal (restart as you make code changes)
|
||||||
|
|
||||||
|
If you modify the source code, you should also run `lint.sh`. This will warn you of linting problems that you can choose to fix, as well as format all of the code to the same standard automatically (usually this will resolve linting warnings)
|
||||||
|
|
||||||
## Roadmap
|
## Roadmap
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user