Compare commits
52
Commits
api
...
voice-channel
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c171f5d766 | ||
|
|
cca0828fb0 | ||
|
|
14254a8d01 | ||
|
|
4120ac71be | ||
|
|
1a090f31fd | ||
|
|
9e0b940f28 | ||
|
|
2c4eb0989e | ||
|
|
9f2bbc7447 | ||
|
|
920df7d92a | ||
|
|
e6db4bc2a4 | ||
|
|
d4b26e1ba2 | ||
|
|
48d3e7c6c7 | ||
|
|
035b5ce49c | ||
|
|
e930fa1589 | ||
|
|
5988506149 | ||
|
|
50a994364a | ||
|
|
f42048d3ed | ||
|
|
f16adfe12a | ||
|
|
13d7508913 | ||
|
|
3511d71444 | ||
|
|
06c1b40f88 | ||
|
|
1a32e081a0 | ||
|
|
5b08b934d7 | ||
|
|
64bdee1711 | ||
|
|
b5461dc360 | ||
|
|
929704b3d9 | ||
|
|
d9813ea952 | ||
|
|
df4600cc4a | ||
|
|
7dce6bca00 | ||
|
|
9b7a8b717c | ||
|
|
fb33805f35 | ||
|
|
f45add002a | ||
|
|
87a3e44e32 | ||
|
|
11ad8063f0 | ||
|
|
8fe85f9c5b | ||
|
|
8618ef3a8d | ||
|
|
48c8d5a94c | ||
|
|
b4e9c90dd1 | ||
|
|
15ad71ee41 | ||
|
|
b94d8e1f36 | ||
|
|
84f95a0e93 | ||
|
|
35d6f79806 | ||
|
|
3163ec5022 | ||
|
|
ae7ea67a1e | ||
|
|
f78665466a | ||
|
|
91b1cea091 | ||
|
|
1ce05964c1 | ||
|
|
581a584c90 | ||
|
|
88cfd0deaf | ||
|
|
3c4bdf4ebf | ||
|
|
28bcbba6c6 | ||
|
|
f774a2acdc |
@@ -113,6 +113,7 @@ Unidecode = "*"
|
||||
youtube_dl = "*"
|
||||
python-dotenv = "*"
|
||||
dpy-http-server = "*"
|
||||
pexpect = "*"
|
||||
|
||||
[dev-packages]
|
||||
black = "*"
|
||||
|
||||
Generated
+224
-111
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "b0bfc480115447133ce50f33da24436fe112a5b51a32cb43859215f89c3d7a2f"
|
||||
"sha256": "c56cc4d73b0cffddf085bf2e6814e7fed928eabddce286fc308cc4d73f999868"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {
|
||||
@@ -78,11 +78,11 @@
|
||||
},
|
||||
"astroid": {
|
||||
"hashes": [
|
||||
"sha256:3975a0bd5373bdce166e60c851cfcbaf21ee96de80ec518c1f4cb3e94c3fb334",
|
||||
"sha256:ab7f36e8a78b8e54a62028ba6beef7561db4cdb6f2a5009ecc44a6f42b5697ef"
|
||||
"sha256:bfd6c41149d1a368e9b7d3cc90470528e080efdd57fbc0c95426794e0be91c5b",
|
||||
"sha256:f973b3622700431b6e8734ce66f6c18503922a13fb8eb8592e78bd4506823efb"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.6.6"
|
||||
"version": "==2.9.1"
|
||||
},
|
||||
"async-generator": {
|
||||
"hashes": [
|
||||
@@ -102,11 +102,11 @@
|
||||
},
|
||||
"attrs": {
|
||||
"hashes": [
|
||||
"sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1",
|
||||
"sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"
|
||||
"sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4",
|
||||
"sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==21.2.0"
|
||||
"version": "==21.4.0"
|
||||
},
|
||||
"autopep8": {
|
||||
"hashes": [
|
||||
@@ -116,14 +116,6 @@
|
||||
"index": "pypi",
|
||||
"version": "==1.6.0"
|
||||
},
|
||||
"backports.entry-points-selectable": {
|
||||
"hashes": [
|
||||
"sha256:7fceed9532a7aa2bd888654a7314f864a3c16a4e710b34a58cfc0f08114c663b",
|
||||
"sha256:914b21a479fde881635f7af5adc7f6e38d6b274be32269070c53b698c60d5386"
|
||||
],
|
||||
"markers": "python_version >= '2.7'",
|
||||
"version": "==1.1.1"
|
||||
},
|
||||
"backports.zoneinfo": {
|
||||
"hashes": [
|
||||
"sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf",
|
||||
@@ -169,14 +161,6 @@
|
||||
"index": "pypi",
|
||||
"version": "==0.0.1"
|
||||
},
|
||||
"cachetools": {
|
||||
"hashes": [
|
||||
"sha256:486471dfa8799eb7ec503a8059e263db000cdda20075ce5e48903087f79d5fd6",
|
||||
"sha256:8fecd4203a38af17928be7b90689d8083603073622229ca7077b72d8e5a976e4"
|
||||
],
|
||||
"markers": "python_version ~= '3.7'",
|
||||
"version": "==5.0.0"
|
||||
},
|
||||
"certifi": {
|
||||
"hashes": [
|
||||
"sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872",
|
||||
@@ -348,11 +332,11 @@
|
||||
},
|
||||
"dnspython": {
|
||||
"hashes": [
|
||||
"sha256:258d7ea3c86c8cea20705e904764fef5e93837c07d1499a13154e9ba0a93b420",
|
||||
"sha256:84656be4dc8379066be55c594622e82250874f9bccc9993f73cf9df72fc4cffc"
|
||||
"sha256:95d12f6ef0317118d2a1a6fc49aac65ffec7eb8087474158f42f26a639135216",
|
||||
"sha256:e4a87f0b573201a0f3727fa18a516b055fd1107e0e5477cded4a2de497df1dd4"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.2.0rc1"
|
||||
"version": "==2.1.0"
|
||||
},
|
||||
"dpy-http-server": {
|
||||
"hashes": [
|
||||
@@ -425,11 +409,11 @@
|
||||
},
|
||||
"identify": {
|
||||
"hashes": [
|
||||
"sha256:a33ae873287e81651c7800ca309dc1f84679b763c9c8b30680e16fbfa82f0107",
|
||||
"sha256:eba31ca80258de6bb51453084bff4a923187cd2193b9c13710f2516ab30732cc"
|
||||
"sha256:0192893ff68b03d37fed553e261d4a22f94ea974093aefb33b29df2ff35fed3c",
|
||||
"sha256:64d4885e539f505dd8ffb5e93c142a1db45480452b1594cacd3e91dca9a984e9"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.4.0"
|
||||
"version": "==2.4.1"
|
||||
},
|
||||
"idna": {
|
||||
"hashes": [
|
||||
@@ -755,31 +739,31 @@
|
||||
},
|
||||
"numpy": {
|
||||
"hashes": [
|
||||
"sha256:07805b77c2b4582bc6888795c0463bf3d4bd758dee922fcd685413eb3274295f",
|
||||
"sha256:0b5642efe2a36f2191102b44bb95ee1479f14c1adb2d7155303e50b2517e43bc",
|
||||
"sha256:11fb5ee7b8a2a01bccdfb715889cb1a8490bfceeba1ab1ca9d01c92329ca5a4b",
|
||||
"sha256:20016b0ed895bb80f37caadd224b01b6cc52520766ba67d8f5536ac16ef08002",
|
||||
"sha256:222ce51bf9d4c77f2222049d75ea908f1862302cab7d5ccdb88773b9514e10af",
|
||||
"sha256:2313aa9b9684b36b0bf07e44432d025e0803518286a1ecae5f0ea947b46008df",
|
||||
"sha256:26271b883db7ff9e375df36ad92fc9921fc336480d0aabe4483503640c9b5dd3",
|
||||
"sha256:301df2531616ff7dac8224c104b38d301adabb96c12650dae06d2036da53c385",
|
||||
"sha256:3d0b6fb9796ba83500990dc18d8dbeaca49559c7f7f47da723fee902a99ee4bb",
|
||||
"sha256:4315a66e64fe1adc7f7fa51116c87cdf5a78f2f8265c6d0ee27bfcbe845b3ddf",
|
||||
"sha256:5b46584808f06d90df177520136cfeb5f2151b0e6a762e94c05a36f82140ff7b",
|
||||
"sha256:6eaa053519d1ed5922621ecb04d33d64769508060860eb0b8a07502d55554a2c",
|
||||
"sha256:6ebe0f0f40aa86c5cbe41e017e2028ba318e0743d93674a19f06a2401e602bd7",
|
||||
"sha256:a0964771a7660fd3d2420d6be0a08144f49f14d684bbe85f67467ad81bd73180",
|
||||
"sha256:af16e2163c1edfaa82ec43a220acc31ad0ff51619efcb41d79440dfc130e9562",
|
||||
"sha256:af718720cb23c795a1470fde1a860c7fbbcd1387e1f3755cf734417f96124766",
|
||||
"sha256:b445551ff10fe31adb76df0e6d0210e02c586686297faddcf453dd51ce2b2ea0",
|
||||
"sha256:b63c2976f10a94af28c2860a74d7cf07ed9489ebfd36fbadb9816d3bf6ba8efb",
|
||||
"sha256:c3a8d12b5bf04ce3495ad2b4d706a3058415185c16d3e8d094264a9de62d52e2",
|
||||
"sha256:ced56665c49691ad8a31d553e42248566678f188e7c1813cadc947bfb91f3abd",
|
||||
"sha256:e55a7a201e1972e2686ffee1dba1ddf5e041989018a707540ba10be8367331b1",
|
||||
"sha256:f13703ad4849ef62d3dadc1af1e00ce2762458b4466d4f3e339d84e6b450af33"
|
||||
"sha256:0cfe07133fd00b27edee5e6385e333e9eeb010607e8a46e1cd673f05f8596595",
|
||||
"sha256:11a1f3816ea82eed4178102c56281782690ab5993251fdfd75039aad4d20385f",
|
||||
"sha256:2762331de395739c91f1abb88041f94a080cb1143aeec791b3b223976228af3f",
|
||||
"sha256:283d9de87c0133ef98f93dfc09fad3fb382f2a15580de75c02b5bb36a5a159a5",
|
||||
"sha256:3d22662b4b10112c545c91a0741f2436f8ca979ab3d69d03d19322aa970f9695",
|
||||
"sha256:41388e32e40b41dd56eb37fcaa7488b2b47b0adf77c66154d6b89622c110dfe9",
|
||||
"sha256:42c16cec1c8cf2728f1d539bd55aaa9d6bb48a7de2f41eb944697293ef65a559",
|
||||
"sha256:47ee7a839f5885bc0c63a74aabb91f6f40d7d7b639253768c4199b37aede7982",
|
||||
"sha256:5a311ee4d983c487a0ab546708edbdd759393a3dc9cd30305170149fedd23c88",
|
||||
"sha256:5dc65644f75a4c2970f21394ad8bea1a844104f0fe01f278631be1c7eae27226",
|
||||
"sha256:6ed0d073a9c54ac40c41a9c2d53fcc3d4d4ed607670b9e7b0de1ba13b4cbfe6f",
|
||||
"sha256:76ba7c40e80f9dc815c5e896330700fd6e20814e69da9c1267d65a4d051080f1",
|
||||
"sha256:818b9be7900e8dc23e013a92779135623476f44a0de58b40c32a15368c01d471",
|
||||
"sha256:a024181d7aef0004d76fb3bce2a4c9f2e67a609a9e2a6ff2571d30e9976aa383",
|
||||
"sha256:a955e4128ac36797aaffd49ab44ec74a71c11d6938df83b1285492d277db5397",
|
||||
"sha256:a97a954a8c2f046d3817c2bce16e3c7e9a9c2afffaf0400f5c16df5172a67c9c",
|
||||
"sha256:a97e82c39d9856fe7d4f9b86d8a1e66eff99cf3a8b7ba48202f659703d27c46f",
|
||||
"sha256:b55b953a1bdb465f4dc181758570d321db4ac23005f90ffd2b434cc6609a63dd",
|
||||
"sha256:bb02929b0d6bfab4c48a79bd805bd7419114606947ec8284476167415171f55b",
|
||||
"sha256:bece0a4a49e60e472a6d1f70ac6cdea00f9ab80ff01132f96bd970cdd8a9e5a9",
|
||||
"sha256:e41e8951749c4b5c9a2dc5fdbc1a4eec6ab2a140fdae9b460b0f557eed870f4d",
|
||||
"sha256:f71d57cc8645f14816ae249407d309be250ad8de93ef61d9709b45a0ddf4050c"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==1.22.0rc3"
|
||||
"version": "==1.22.0"
|
||||
},
|
||||
"outcome": {
|
||||
"hashes": [
|
||||
@@ -820,6 +804,14 @@
|
||||
"index": "pypi",
|
||||
"version": "==0.9.0"
|
||||
},
|
||||
"pexpect": {
|
||||
"hashes": [
|
||||
"sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937",
|
||||
"sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==4.8.0"
|
||||
},
|
||||
"pillow": {
|
||||
"hashes": [
|
||||
"sha256:066f3999cb3b070a95c3652712cffa1a748cd02d60ad7b4e485c3748a04d9d76",
|
||||
@@ -907,6 +899,21 @@
|
||||
"index": "pypi",
|
||||
"version": "==3.55.0"
|
||||
},
|
||||
"ptyprocess": {
|
||||
"hashes": [
|
||||
"sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35",
|
||||
"sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"
|
||||
],
|
||||
"version": "==0.7.0"
|
||||
},
|
||||
"py": {
|
||||
"hashes": [
|
||||
"sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719",
|
||||
"sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
|
||||
"version": "==1.11.0"
|
||||
},
|
||||
"pycodestyle": {
|
||||
"hashes": [
|
||||
"sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20",
|
||||
@@ -941,11 +948,11 @@
|
||||
},
|
||||
"pygments": {
|
||||
"hashes": [
|
||||
"sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380",
|
||||
"sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"
|
||||
"sha256:59b895e326f0fb0d733fd28c6839bd18ad0687ba20efc26d4277fd1d30b971f4",
|
||||
"sha256:9135c1af61eec0f650cd1ea1ed8ce298e54d56bcd8cc2ef46edd7702c171337c"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.10.0"
|
||||
"version": "==2.11.1"
|
||||
},
|
||||
"pyjwt": {
|
||||
"hashes": [
|
||||
@@ -957,11 +964,11 @@
|
||||
},
|
||||
"pylint": {
|
||||
"hashes": [
|
||||
"sha256:349b149e88e4357ed4f77ac3a4e61c0ab965cda293b6f4e58caf73d4b24ae551",
|
||||
"sha256:adc11bec00c2084bf55c81dd69e26f2793fef757547997d44b21aed038f74403"
|
||||
"sha256:9d945a73640e1fec07ee34b42f5669b770c759acd536ec7b16d7e4b87a9c9ff9",
|
||||
"sha256:daabda3f7ed9d1c60f52d563b1b854632fd90035bcf01443e234d3dc794e3b74"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==3.0.0a4"
|
||||
"version": "==2.12.2"
|
||||
},
|
||||
"pymongo": {
|
||||
"hashes": [
|
||||
@@ -1118,11 +1125,11 @@
|
||||
},
|
||||
"python-utils": {
|
||||
"hashes": [
|
||||
"sha256:c4dbd30a56e4eb9213e850334de0aa316c78affd6f1a7995ff698b6720aa5ecb",
|
||||
"sha256:cc9822f7e5040a0251edef18dcd39a4458e63e48254e64f016950f0f03cddd88"
|
||||
"sha256:88595bfa054975534a2f813b6c8deb96b44f3b6fad00a927fd062fe65550fadf",
|
||||
"sha256:9d535eda3fd4c0cd51f459bb9cfddd983a50f5adfacb0995504d12bf0c2981cb"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.6.3"
|
||||
"version": "==2.7.1"
|
||||
},
|
||||
"pytz": {
|
||||
"hashes": [
|
||||
@@ -1323,32 +1330,38 @@
|
||||
},
|
||||
"scipy": {
|
||||
"hashes": [
|
||||
"sha256:28ae39a37a00f7279c1f200f0bbecd01837d489025951732556b271b38ce84f0",
|
||||
"sha256:2e5a776dc7105b53204b3c9b948ee32c0325664279cccf87f7285d3cf6f4c06b",
|
||||
"sha256:301ebcd624f6949e46f8f573564168fe59bdd6b56ce81df6a82f6e00db8e1d98",
|
||||
"sha256:3b1d2af8a14bc393b6c763802e1e228f0f8918c29e01cef4542a712188303e78",
|
||||
"sha256:3bbc009781112537a5e7969abebff60a4cbc641f4394c29cf08047f2826d3e77",
|
||||
"sha256:4035b0f70d1bdbfe143005bb1033938529f684c0b93b4a90c2f59bbd88bcd0d3",
|
||||
"sha256:55863c865d651aa2e49d72778db976c0d38db7ddf9ec26ee869e56c1a8c799d1",
|
||||
"sha256:5b39372472fb79ea4a35684bb2f3a573e6ffe805179a07965a50d2df10e17ce3",
|
||||
"sha256:62164c89c57e7bc8ca931e29edf25f534828e2cc4b7eb254f34eaa7c395dae83",
|
||||
"sha256:63bea96f299c549febe7039e8c80942217e3e39851fb2258fae430b722610573",
|
||||
"sha256:739ee3f6688c96516248f88725bbe1f241f3e0ab708f5eda98e2a9fe5cf38fba",
|
||||
"sha256:7ae0f1c0bce0188bcb93666f7ffdc4dfcedd071e60a92fd6107bc6061cab79c6",
|
||||
"sha256:83b7a82a56ccaf8b5accd8f4988898412806aecb3f52fc505eeccaee9d8cb889",
|
||||
"sha256:874588522c8c97ec285effbd0bcd7c9de03e918674a9decc5779cc85de408e0d",
|
||||
"sha256:8db99b6c017ab971b04a0781103a31ce745d4f0ac2b7db999523d4a94549ae15",
|
||||
"sha256:9439aa6e8076df746e6d026328ba01a2160e886f185926e8915849f1e124422f",
|
||||
"sha256:94a33efa21cffc5c3f8d416c0c1c79914019b9e3a82b5461176e4dc1c42218ea",
|
||||
"sha256:aa31ae8d8cf0abba07bc795f75b1aacf46b6136be22eefb4435040386f0f2bec",
|
||||
"sha256:bb3931cc7281fc0e5cc94f4cdc316a8628206bac24ed0ccd999be09266bc9970",
|
||||
"sha256:d6ccda8592a30120ea4c3ab669a10ab6e0c45284df9066b6583165d5092e75a7",
|
||||
"sha256:d73b13eb0452c178f946b4db60b27e400225df02e926609652ed67798054e77d",
|
||||
"sha256:da36fd4d686ac936b7cd6b8348dfd4aebfd42650fcf15af62e5d9b582a9e7cb6",
|
||||
"sha256:f3b64d3456c4f52e665019e08347c86618b702c190a9130df3c6e0a9f43eca78"
|
||||
"sha256:033ce76ed4e9f62923e1f8124f7e2b0800db533828c853b402c7eec6e9465d80",
|
||||
"sha256:173308efba2270dcd61cd45a30dfded6ec0085b4b6eb33b5eb11ab443005e088",
|
||||
"sha256:21b66200cf44b1c3e86495e3a436fc7a26608f92b8d43d344457c54f1c024cbc",
|
||||
"sha256:2c56b820d304dffcadbbb6cbfbc2e2c79ee46ea291db17e288e73cd3c64fefa9",
|
||||
"sha256:304dfaa7146cffdb75fbf6bb7c190fd7688795389ad060b970269c8576d038e9",
|
||||
"sha256:3f78181a153fa21c018d346f595edd648344751d7f03ab94b398be2ad083ed3e",
|
||||
"sha256:4d242d13206ca4302d83d8a6388c9dfce49fc48fdd3c20efad89ba12f785bf9e",
|
||||
"sha256:5d1cc2c19afe3b5a546ede7e6a44ce1ff52e443d12b231823268019f608b9b12",
|
||||
"sha256:5f2cfc359379c56b3a41b17ebd024109b2049f878badc1e454f31418c3a18436",
|
||||
"sha256:65bd52bf55f9a1071398557394203d881384d27b9c2cad7df9a027170aeaef93",
|
||||
"sha256:7edd9a311299a61e9919ea4192dd477395b50c014cdc1a1ac572d7c27e2207fa",
|
||||
"sha256:8499d9dd1459dc0d0fe68db0832c3d5fc1361ae8e13d05e6849b358dc3f2c279",
|
||||
"sha256:866ada14a95b083dd727a845a764cf95dd13ba3dc69a16b99038001b05439709",
|
||||
"sha256:87069cf875f0262a6e3187ab0f419f5b4280d3dcf4811ef9613c605f6e4dca95",
|
||||
"sha256:93378f3d14fff07572392ce6a6a2ceb3a1f237733bd6dcb9eb6a2b29b0d19085",
|
||||
"sha256:95c2d250074cfa76715d58830579c64dff7354484b284c2b8b87e5a38321672c",
|
||||
"sha256:ab5875facfdef77e0a47d5fd39ea178b58e60e454a4c85aa1e52fcb80db7babf",
|
||||
"sha256:b0e0aeb061a1d7dcd2ed59ea57ee56c9b23dd60100825f98238c06ee5cc4467e",
|
||||
"sha256:b78a35c5c74d336f42f44106174b9851c783184a85a3fe3e68857259b37b9ffb",
|
||||
"sha256:c9e04d7e9b03a8a6ac2045f7c5ef741be86727d8f49c45db45f244bdd2bcff17",
|
||||
"sha256:ca36e7d9430f7481fc7d11e015ae16fbd5575615a8e9060538104778be84addf",
|
||||
"sha256:ceebc3c4f6a109777c0053dfa0282fddb8893eddfb0d598574acfb734a926168",
|
||||
"sha256:e2c036492e673aad1b7b0d0ccdc0cb30a968353d2c4bf92ac8e73509e1bf212c",
|
||||
"sha256:eb326658f9b73c07081300daba90a8746543b5ea177184daed26528273157294",
|
||||
"sha256:eb7ae2c4dbdb3c9247e07acc532f91077ae6dbc40ad5bd5dca0bb5a176ee9bda",
|
||||
"sha256:edad1cf5b2ce1912c4d8ddad20e11d333165552aba262c882e28c78bbc09dbf6",
|
||||
"sha256:eef93a446114ac0193a7b714ce67659db80caf940f3232bad63f4c7a81bc18df",
|
||||
"sha256:f7eaea089345a35130bc9a39b89ec1ff69c208efa97b3f8b25ea5d4c41d88094",
|
||||
"sha256:f99d206db1f1ae735a8192ab93bd6028f3a42f6fa08467d37a14eb96c9dd34a3"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==1.8.0rc2"
|
||||
"version": "==1.7.3"
|
||||
},
|
||||
"secretstorage": {
|
||||
"hashes": [
|
||||
@@ -1367,11 +1380,11 @@
|
||||
},
|
||||
"setuptools": {
|
||||
"hashes": [
|
||||
"sha256:a4377723c53721515f72a3dfc1bfacdcd61edfa19a4cccf82e72e4f50d9cecbd",
|
||||
"sha256:ad0ea3d172404abb14d8f7bd7f54f2ccd4ed9dd00c9da0b1398862e69eb22c03"
|
||||
"sha256:5c89b1a14a67ac5f0956f1cb0aeb7d1d3f4c8ba4e4e1ab7bf1af4933f9a2f0fe",
|
||||
"sha256:675fcebecb43c32eb930481abf907619137547f4336206e4d673180242e1a278"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==60.1.0"
|
||||
"version": "==60.2.0"
|
||||
},
|
||||
"six": {
|
||||
"hashes": [
|
||||
@@ -1444,11 +1457,11 @@
|
||||
},
|
||||
"tox": {
|
||||
"hashes": [
|
||||
"sha256:28a4292eb2634a708dbab9184c56c02dd255641900f7dbf8f6ae21b98f8829f0",
|
||||
"sha256:8c9095ff5044da60b2a55364a1285423b584785b05c3d1e29887b9d6dc2a1192"
|
||||
"sha256:67e0e32c90e278251fea45b696d0fef3879089ccbe979b0c556d35d5a70e2993",
|
||||
"sha256:be3362472a33094bce26727f5f771ca0facf6dafa217f65875314e9a6600c95c"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==4.0.0a9"
|
||||
"version": "==3.24.5"
|
||||
},
|
||||
"translate": {
|
||||
"hashes": [
|
||||
@@ -1549,11 +1562,11 @@
|
||||
},
|
||||
"virtualenv": {
|
||||
"hashes": [
|
||||
"sha256:4b02e52a624336eece99c96e3ab7111f469c24ba226a53ec474e8e787b365814",
|
||||
"sha256:576d05b46eace16a9c348085f7d0dc8ef28713a2cabaa1cf0aea41e8f12c9218"
|
||||
"sha256:a5bb9afc076462ea736b0c060829ed6aef707413d0e5946294cc26e3c821436a",
|
||||
"sha256:d51ae01ef49e7de4d2b9d85b4926ac5aabc3f3879a4b4e4c4a8027fa2f0e4f6a"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==20.10.0"
|
||||
"version": "==20.12.1"
|
||||
},
|
||||
"websockets": {
|
||||
"hashes": [
|
||||
@@ -1626,10 +1639,60 @@
|
||||
},
|
||||
"wrapt": {
|
||||
"hashes": [
|
||||
"sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"
|
||||
"sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179",
|
||||
"sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096",
|
||||
"sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374",
|
||||
"sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df",
|
||||
"sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185",
|
||||
"sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785",
|
||||
"sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7",
|
||||
"sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909",
|
||||
"sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918",
|
||||
"sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33",
|
||||
"sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068",
|
||||
"sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829",
|
||||
"sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af",
|
||||
"sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79",
|
||||
"sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce",
|
||||
"sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc",
|
||||
"sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36",
|
||||
"sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade",
|
||||
"sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca",
|
||||
"sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32",
|
||||
"sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125",
|
||||
"sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e",
|
||||
"sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709",
|
||||
"sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f",
|
||||
"sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b",
|
||||
"sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb",
|
||||
"sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb",
|
||||
"sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489",
|
||||
"sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640",
|
||||
"sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb",
|
||||
"sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851",
|
||||
"sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d",
|
||||
"sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44",
|
||||
"sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13",
|
||||
"sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2",
|
||||
"sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb",
|
||||
"sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b",
|
||||
"sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9",
|
||||
"sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755",
|
||||
"sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c",
|
||||
"sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a",
|
||||
"sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf",
|
||||
"sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3",
|
||||
"sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229",
|
||||
"sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e",
|
||||
"sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de",
|
||||
"sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554",
|
||||
"sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10",
|
||||
"sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80",
|
||||
"sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056",
|
||||
"sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==1.12.1"
|
||||
"version": "==1.13.3"
|
||||
},
|
||||
"wsproto": {
|
||||
"hashes": [
|
||||
@@ -1735,11 +1798,11 @@
|
||||
},
|
||||
"zipp": {
|
||||
"hashes": [
|
||||
"sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832",
|
||||
"sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"
|
||||
"sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d",
|
||||
"sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==3.6.0"
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==3.7.0"
|
||||
},
|
||||
"zope.interface": {
|
||||
"hashes": [
|
||||
@@ -1802,11 +1865,11 @@
|
||||
"develop": {
|
||||
"astroid": {
|
||||
"hashes": [
|
||||
"sha256:3975a0bd5373bdce166e60c851cfcbaf21ee96de80ec518c1f4cb3e94c3fb334",
|
||||
"sha256:ab7f36e8a78b8e54a62028ba6beef7561db4cdb6f2a5009ecc44a6f42b5697ef"
|
||||
"sha256:bfd6c41149d1a368e9b7d3cc90470528e080efdd57fbc0c95426794e0be91c5b",
|
||||
"sha256:f973b3622700431b6e8734ce66f6c18503922a13fb8eb8592e78bd4506823efb"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.6.6"
|
||||
"version": "==2.9.1"
|
||||
},
|
||||
"black": {
|
||||
"hashes": [
|
||||
@@ -1925,19 +1988,19 @@
|
||||
},
|
||||
"pylint": {
|
||||
"hashes": [
|
||||
"sha256:349b149e88e4357ed4f77ac3a4e61c0ab965cda293b6f4e58caf73d4b24ae551",
|
||||
"sha256:adc11bec00c2084bf55c81dd69e26f2793fef757547997d44b21aed038f74403"
|
||||
"sha256:9d945a73640e1fec07ee34b42f5669b770c759acd536ec7b16d7e4b87a9c9ff9",
|
||||
"sha256:daabda3f7ed9d1c60f52d563b1b854632fd90035bcf01443e234d3dc794e3b74"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==3.0.0a4"
|
||||
"version": "==2.12.2"
|
||||
},
|
||||
"setuptools": {
|
||||
"hashes": [
|
||||
"sha256:a4377723c53721515f72a3dfc1bfacdcd61edfa19a4cccf82e72e4f50d9cecbd",
|
||||
"sha256:ad0ea3d172404abb14d8f7bd7f54f2ccd4ed9dd00c9da0b1398862e69eb22c03"
|
||||
"sha256:5c89b1a14a67ac5f0956f1cb0aeb7d1d3f4c8ba4e4e1ab7bf1af4933f9a2f0fe",
|
||||
"sha256:675fcebecb43c32eb930481abf907619137547f4336206e4d673180242e1a278"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==60.1.0"
|
||||
"version": "==60.2.0"
|
||||
},
|
||||
"toml": {
|
||||
"hashes": [
|
||||
@@ -1965,10 +2028,60 @@
|
||||
},
|
||||
"wrapt": {
|
||||
"hashes": [
|
||||
"sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"
|
||||
"sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179",
|
||||
"sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096",
|
||||
"sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374",
|
||||
"sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df",
|
||||
"sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185",
|
||||
"sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785",
|
||||
"sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7",
|
||||
"sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909",
|
||||
"sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918",
|
||||
"sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33",
|
||||
"sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068",
|
||||
"sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829",
|
||||
"sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af",
|
||||
"sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79",
|
||||
"sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce",
|
||||
"sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc",
|
||||
"sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36",
|
||||
"sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade",
|
||||
"sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca",
|
||||
"sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32",
|
||||
"sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125",
|
||||
"sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e",
|
||||
"sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709",
|
||||
"sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f",
|
||||
"sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b",
|
||||
"sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb",
|
||||
"sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb",
|
||||
"sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489",
|
||||
"sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640",
|
||||
"sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb",
|
||||
"sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851",
|
||||
"sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d",
|
||||
"sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44",
|
||||
"sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13",
|
||||
"sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2",
|
||||
"sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb",
|
||||
"sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b",
|
||||
"sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9",
|
||||
"sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755",
|
||||
"sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c",
|
||||
"sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a",
|
||||
"sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf",
|
||||
"sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3",
|
||||
"sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229",
|
||||
"sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e",
|
||||
"sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de",
|
||||
"sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554",
|
||||
"sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10",
|
||||
"sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80",
|
||||
"sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056",
|
||||
"sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==1.12.1"
|
||||
"version": "==1.13.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-10
@@ -1,12 +1,9 @@
|
||||
from config.config import access, status, delete_after_time, masters, cluster
|
||||
from config.config import access, cluster
|
||||
from config import shops
|
||||
from utils import tools
|
||||
|
||||
from discord.ext import commands, tasks
|
||||
from discord.ext import commands
|
||||
from models.terminal import Terminal
|
||||
import discord
|
||||
import random
|
||||
import time
|
||||
import os
|
||||
import typing
|
||||
|
||||
@@ -27,6 +24,7 @@ class Muted(commands.Converter):
|
||||
|
||||
class Admin(commands.Cog):
|
||||
def __init__(self, bot: commands.Bot, **kwargs):
|
||||
"""Cog pour administrer un serveur."""
|
||||
super().__init__(**kwargs)
|
||||
self.bot = bot
|
||||
self.kick_reason = "c'est la vie"
|
||||
@@ -245,11 +243,7 @@ class Admin(commands.Cog):
|
||||
name=self.muted_role_name,
|
||||
reason="Pour muter les gens trop bavards.",
|
||||
)
|
||||
for (
|
||||
channel
|
||||
) in (
|
||||
ctx.guild.channels
|
||||
): # removes permission to view and send in the channel
|
||||
for channel in ctx.guild.channels: # removes permission to view and send in the channel
|
||||
await channel.set_permissions(
|
||||
role,
|
||||
send_messages=False,
|
||||
|
||||
+1
-2
@@ -7,11 +7,10 @@ __author__ = "Marc Partensky"
|
||||
# from utils import tools
|
||||
|
||||
import os
|
||||
import discord
|
||||
import typing
|
||||
import uuid
|
||||
import discord
|
||||
import traceback
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
|
||||
import server
|
||||
|
||||
+1
-4
@@ -142,7 +142,7 @@ class Code(commands.Cog):
|
||||
author = msg.author
|
||||
|
||||
if ctx.author.id in self.users_list:
|
||||
if msg.content == "?python":
|
||||
if msg.content == self.bot.command_prefix + "python":
|
||||
pass
|
||||
else:
|
||||
await self.execute(ctx, cmd=code)
|
||||
@@ -158,9 +158,6 @@ class Code(commands.Cog):
|
||||
and str(reaction.emoji) in emojis
|
||||
)
|
||||
|
||||
class DestroyReactions(Exception):
|
||||
"""Destroy the reactions."""
|
||||
|
||||
try:
|
||||
reaction, user = await self.bot.wait_for(
|
||||
"reaction_add", timeout=60.0, check=check
|
||||
|
||||
+7
-2
@@ -219,7 +219,12 @@ class Docker(commands.Cog):
|
||||
continue
|
||||
print(content)
|
||||
texts = []
|
||||
text = f"{name}\n" + "_" * len(name) + "\n\n " + "".join([f"{word: <10}" for word in content["Titles"]])
|
||||
text = (
|
||||
f"{name}\n"
|
||||
+ "_" * len(name)
|
||||
+ "\n\n "
|
||||
+ "".join([f"{word: <10}" for word in content["Titles"]])
|
||||
)
|
||||
n = len(text)
|
||||
for process in content["Processes"]:
|
||||
line = " \n * " + "".join([f"{word: <10}" for word in process])
|
||||
@@ -230,7 +235,7 @@ class Docker(commands.Cog):
|
||||
text += line
|
||||
texts.append(text)
|
||||
for text in texts:
|
||||
text = text.replace('_', '‗')
|
||||
text = text.replace("_", "‗")
|
||||
await ctx.send("```md\n" + text + "\n```")
|
||||
|
||||
@commands.has_role(DOCKER_ROLE)
|
||||
|
||||
+85
-11
@@ -1,30 +1,104 @@
|
||||
#!/usr/bin/env python
|
||||
"""Control shells."""
|
||||
|
||||
from discord.ext import commands
|
||||
import os
|
||||
import sys
|
||||
import typing
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
from discord.ext.commands.core import has_role
|
||||
|
||||
from utils import tools
|
||||
from config.config import access, masters
|
||||
from config import emoji
|
||||
from urllib.parse import quote
|
||||
from utils.tools import create_role_if_missing, Capturing
|
||||
|
||||
import requests
|
||||
import asyncio
|
||||
import re
|
||||
|
||||
import pexpect
|
||||
|
||||
SHELL_ROLE = "Shell"
|
||||
|
||||
|
||||
class Shell(commands.Cog):
|
||||
"""Control shells"""
|
||||
|
||||
def __init__(self, bot: commands.Bot):
|
||||
"""Initialize the cog with the bot."""
|
||||
self.bot = bot
|
||||
self.color: discord.Color = discord.Color.darker_grey()
|
||||
# self.thumbnail: str = (
|
||||
# "https://cdn0.iconfinder.com/data/icons/development-2/24/terminal-512.png"
|
||||
# )
|
||||
self.thumbnail: str = "https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/GNOME_Terminal_icon_2019.svg/1200px-GNOME_Terminal_icon_2019.svg.png"
|
||||
self.shells: typing.Dict[int, pexpect.pty_spawn.spawn] = {}
|
||||
self.timeout = 3600
|
||||
self.shell_path = os.environ.get("SHELL")
|
||||
|
||||
@commands.command()
|
||||
async def shell(self, ctx: commands.Context, *, command: str):
|
||||
@has_role(SHELL_ROLE)
|
||||
@commands.command(aliases=["sh"])
|
||||
async def shell(self, ctx: commands.Context):
|
||||
"""Run a command in a shell"""
|
||||
await ctx.send(command)
|
||||
await create_role_if_missing(ctx, SHELL_ROLE, self.color)
|
||||
embed = discord.Embed(color=self.color)
|
||||
embed.set_thumbnail(url=self.thumbnail)
|
||||
embed.set_author(name=ctx.author.name, icon_url=ctx.author.avatar)
|
||||
embed.description = self.shell_path
|
||||
|
||||
if ctx.author.id in self.shells:
|
||||
shell = self.shells[ctx.author.id]
|
||||
shell.close()
|
||||
del self.shells[ctx.author.id]
|
||||
embed.title = "Closed shell"
|
||||
await ctx.send(embed=embed)
|
||||
else:
|
||||
embed.title = "Opened shell"
|
||||
await ctx.send(embed=embed)
|
||||
shell = pexpect.spawn(command=self.shell_path, encoding="utf-8")
|
||||
# shell = pexpect.spawn(
|
||||
# command=self.shell_path, timeout=self.timeout, encoding="utf-8"
|
||||
# )
|
||||
# shell.logfile = open(f"/tmp/discord_shell_{ctx.author.id}", "w")
|
||||
# shell.logfile = sys.stdout
|
||||
self.shells[ctx.author.id] = shell
|
||||
|
||||
@commands.command(name="shells")
|
||||
async def list_shells(self, ctx: commands.Context):
|
||||
"""List opened shells."""
|
||||
if len(self.shells) == 0:
|
||||
return await ctx.send("> No shell opened.")
|
||||
embed = discord.Embed(title="Shells :", color=self.color)
|
||||
embed.set_thumbnail(url=self.thumbnail)
|
||||
|
||||
shell_users = []
|
||||
for shell_user in map(self.bot.fetch_user, self.shells.keys()):
|
||||
shell_users.append(f"- {await shell_user}")
|
||||
embed.description = "\n".join(shell_users)
|
||||
await ctx.send(embed=embed)
|
||||
|
||||
@commands.Cog.listener(name="on_message")
|
||||
async def on_message(self, msg: discord.Message):
|
||||
"""Read all messages"""
|
||||
if msg.author == self.bot.user:
|
||||
return
|
||||
if msg.content.startswith(self.bot.command_prefix):
|
||||
return
|
||||
if msg.author.id in self.shells:
|
||||
shell = self.shells[msg.author.id]
|
||||
print(shell.sendline(msg.content))
|
||||
# output = shell.read()
|
||||
# output = shell.before
|
||||
# print(output)
|
||||
shell.expect(pexpect.EOF)
|
||||
# shell.expect(".*\$ ")
|
||||
output = shell.before
|
||||
# output = "\n".join(output_list)
|
||||
print(output)
|
||||
# await msg.channel.send(output)
|
||||
await msg.channel.send("test")
|
||||
|
||||
# async def cog_common_error(self, ctx, error):
|
||||
# """Close all shell sessions."""
|
||||
# for shell in self.shells.values():
|
||||
# shell.close()
|
||||
|
||||
|
||||
def setup(bot):
|
||||
"""Setup the Shell cog."""
|
||||
bot.add_cog(Shell(bot))
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
"""Monitor voice channels."""
|
||||
|
||||
import os
|
||||
import logging
|
||||
from typing import List
|
||||
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
|
||||
from config.config import masters
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
|
||||
class VoiceChannel(commands.Cog):
|
||||
"""Monitor voice channels."""
|
||||
|
||||
def __init__(self, bot: commands.Bot, **kwargs):
|
||||
"""Initialize the cog."""
|
||||
super().__init__(**kwargs)
|
||||
self.bot = bot
|
||||
self.role = "Voix"
|
||||
self.color = discord.Color.teal()
|
||||
self.notify_channel_id: int = os.environ.get("CHNOTIF")
|
||||
self.tmp_channel_name = "Temporaire"
|
||||
|
||||
async def get_bot_member(self, guild: discord.Guild):
|
||||
"""Return the member object of the bot."""
|
||||
return guild.fetch_member(self.bot.user.id)
|
||||
|
||||
async def create_role_if_missing(self, guild: discord.Guild):
|
||||
"""Create the voice role if it doesn't already exist."""
|
||||
if self.role in [role.name for role in guild.roles]:
|
||||
return
|
||||
# Create the role
|
||||
role = await guild.create_role(name=self.role, colour=self.color)
|
||||
# Add the role to all the masters
|
||||
for master in masters:
|
||||
if member := await guild.fetch_member(master):
|
||||
if self.role in [role.name for role in member.roles]:
|
||||
await member.add_roles(role)
|
||||
|
||||
@commands.Cog.listener()
|
||||
async def on_voice_state_update(
|
||||
self,
|
||||
member: discord.Member,
|
||||
before: discord.VoiceState,
|
||||
after: discord.VoiceState,
|
||||
):
|
||||
"""Detect any changes on voice channels"""
|
||||
await self.create_role_if_missing(member.guild)
|
||||
if member.bot:
|
||||
return
|
||||
if not after.channel:
|
||||
await self.leave(member, before)
|
||||
elif not before.channel:
|
||||
await self.join(member, after)
|
||||
else:
|
||||
await self.move(member, before, after)
|
||||
|
||||
async def leave(
|
||||
self,
|
||||
member: discord.Member,
|
||||
before: discord.VoiceState,
|
||||
):
|
||||
"""Detect when a user leaves."""
|
||||
logging.info("leave")
|
||||
logging.info(member)
|
||||
logging.info(before)
|
||||
channel: discord.VoiceChannel = before.channel
|
||||
members: List[discord.Member] = channel.members
|
||||
await self.mute_if_single(members)
|
||||
await self.leave_if_alone(members, before.channel)
|
||||
|
||||
async def join(
|
||||
self,
|
||||
member: discord.Member,
|
||||
after: discord.VoiceState,
|
||||
):
|
||||
"""Detect when a user leaves."""
|
||||
logging.info("join")
|
||||
logging.info(member)
|
||||
logging.info(after)
|
||||
channel: discord.VoiceChannel = after.channel
|
||||
members: List[discord.Member] = channel.members
|
||||
await self.mute_if_single(members)
|
||||
await self.notify_on_join(member)
|
||||
await self.join_if_single(members)
|
||||
|
||||
async def move(
|
||||
self,
|
||||
member: discord.Member,
|
||||
before: discord.VoiceState,
|
||||
after: discord.VoiceState,
|
||||
):
|
||||
"""Detect when a user leaves."""
|
||||
logging.info("move")
|
||||
logging.info(member)
|
||||
logging.info(before)
|
||||
logging.info(after)
|
||||
before_channel: discord.VoiceChannel = before.channel
|
||||
before_members: List[discord.Member] = before_channel.members
|
||||
after_channel: discord.VoiceChannel = after.channel
|
||||
after_members: List[discord.Member] = after_channel.members
|
||||
await self.mute_if_single(before_members)
|
||||
await self.join_if_single(after_members)
|
||||
|
||||
async def mute_if_single(self, members: List[discord.Member]):
|
||||
"""Mute a member if single."""
|
||||
logging.info("mute if single")
|
||||
logging.info(members)
|
||||
members = list(filter(lambda m: not m.bot, members))
|
||||
if len(members) != 1:
|
||||
return
|
||||
member = members[0]
|
||||
if member.voice:
|
||||
if self.role in map(lambda r: r.name, member.roles):
|
||||
await member.edit(mute=True)
|
||||
|
||||
async def join_if_single(self, members: List[discord.Member]):
|
||||
"""Mute a member if single."""
|
||||
logging.info("join if single")
|
||||
logging.info(members)
|
||||
members = list(filter(lambda m: not m.bot, members))
|
||||
if len(members) != 1:
|
||||
return
|
||||
member = members[0]
|
||||
destination = member.voice.channel
|
||||
for voice_client in self.bot.voice_clients:
|
||||
if voice_client.channel.id == member.voice.channel.id:
|
||||
return
|
||||
elif voice_client.channel in member.guild.voice_channels:
|
||||
await voice_client.move_to(destination)
|
||||
return
|
||||
if self.bot.user.id not in [m.id for m in destination.members]:
|
||||
await destination.connect()
|
||||
|
||||
async def notify_on_join(self, member: discord.Member):
|
||||
"""Notify me if a member joins."""
|
||||
logging.info("notify on join")
|
||||
logging.info(member)
|
||||
if member.id in masters:
|
||||
return
|
||||
if member.bot:
|
||||
return
|
||||
chan_id = self.notify_channel_id
|
||||
channel: discord.TextChannel = await self.bot.fetch_channel(chan_id)
|
||||
await channel.send(f"> **{member}** a rejoint **{channel}**.", delete_after=60)
|
||||
|
||||
async def leave_if_alone(
|
||||
self, members: List[discord.Member], channel: discord.VoiceChannel
|
||||
):
|
||||
"""Mute a member if single."""
|
||||
logging.info("leave if alone")
|
||||
true_members = list(filter(lambda m: not m.bot, members))
|
||||
if len(true_members) > 0:
|
||||
return
|
||||
bot_search_results = list(filter(lambda m: m.id == self.bot.user.id, members))
|
||||
if len(bot_search_results) == 0:
|
||||
return
|
||||
for voice_client in self.bot.voice_clients:
|
||||
if voice_client.channel.id == channel.id:
|
||||
await voice_client.disconnect()
|
||||
break
|
||||
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(VoiceChannel(bot))
|
||||
+6
-9
@@ -1,14 +1,11 @@
|
||||
from .credentials import mongo_url, wolfram_alpha_id
|
||||
from utils import access, check
|
||||
|
||||
import itertools
|
||||
|
||||
from pymongo import MongoClient
|
||||
import pymongo
|
||||
import os
|
||||
import itertools
|
||||
import wolframalpha
|
||||
|
||||
from utils.access import Access
|
||||
from utils.check import Check
|
||||
from models.mongo import MongoCluster
|
||||
from .credentials import mongo_url, wolfram_alpha_id
|
||||
|
||||
|
||||
cluster = MongoCluster(mongo_url)
|
||||
@@ -32,5 +29,5 @@ status = itertools.cycle(
|
||||
"finaliser la théorie quantique",
|
||||
]
|
||||
)
|
||||
access = access.Access(masters) # Create access for commands
|
||||
check = check.Check()
|
||||
access = Access(masters) # Create access for commands
|
||||
check = Check()
|
||||
|
||||
+17
-5
@@ -1,9 +1,21 @@
|
||||
import inspect
|
||||
from discord.ext import commands
|
||||
from utils import tools
|
||||
from config import emoji
|
||||
|
||||
|
||||
def post_passer(func, *passed_args, **passed_kwargs):
|
||||
"""Decorator that passes additionnal arguments (after its own) to a function."""
|
||||
|
||||
def decorated(*args, **kwargs):
|
||||
args = list(args)
|
||||
args.extend(passed_args)
|
||||
args = tuple(args)
|
||||
kwargs.update(passed_kwargs)
|
||||
return func(*args, **kwargs)
|
||||
|
||||
return decorated
|
||||
|
||||
|
||||
class Check:
|
||||
@staticmethod
|
||||
def same_author(msg, ctx):
|
||||
@@ -27,7 +39,7 @@ class Check:
|
||||
try:
|
||||
msg = await ctx.bot.wait_for(
|
||||
"message",
|
||||
check=tools.post_passer(Check.same_author, ctx),
|
||||
check=post_passer(Check.same_author, ctx),
|
||||
timeout=self.timeout,
|
||||
)
|
||||
if msg.content.lower() in self.yes:
|
||||
@@ -42,13 +54,13 @@ class Check:
|
||||
|
||||
def consent(self, message):
|
||||
message = self.consent_message + " " + message
|
||||
return tools.post_passer(self.validation, message=message)
|
||||
return post_passer(self.validation, message=message)
|
||||
|
||||
def validate(self, message):
|
||||
return tools.post_passer(self.validation, message=message)
|
||||
return post_passer(self.validation, message=message)
|
||||
|
||||
def warn(self, message):
|
||||
return tools.post_passer(self.validation, message=message, warning=True)
|
||||
return post_passer(self.validation, message=message, warning=True)
|
||||
|
||||
def validation(self, func, message=None, warning=False):
|
||||
async def decorated(command, ctx: commands.Context, *args):
|
||||
|
||||
+34
-17
@@ -1,8 +1,9 @@
|
||||
import sys
|
||||
import signal
|
||||
from contextlib import contextmanager
|
||||
from io import StringIO
|
||||
import sys
|
||||
from discord.ext import commands
|
||||
from config.config import masters
|
||||
import discord
|
||||
|
||||
|
||||
@@ -59,19 +60,6 @@ class DictObject(dict):
|
||||
self.__dict__ = self
|
||||
|
||||
|
||||
def post_passer(func, *passed_args, **passed_kwargs):
|
||||
"""Decorator that passes additionnal arguments (after its own) to a function."""
|
||||
|
||||
def decorated(*args, **kwargs):
|
||||
args = list(args)
|
||||
args.extend(passed_args)
|
||||
args = tuple(args)
|
||||
kwargs.update(passed_kwargs)
|
||||
return func(*args, **kwargs)
|
||||
|
||||
return decorated
|
||||
|
||||
|
||||
def for_all_cog_methods(decorator_method):
|
||||
def decorate(cls):
|
||||
def decorator__new__(new):
|
||||
@@ -133,7 +121,7 @@ def lazy_embed(
|
||||
fields: dict,
|
||||
title: str = None,
|
||||
description: str = None,
|
||||
color: bytes = None,
|
||||
color: discord.Colour = None,
|
||||
footer: str = None,
|
||||
url: str = None,
|
||||
thumbnail: str = None,
|
||||
@@ -145,8 +133,37 @@ def lazy_embed(
|
||||
embed.set_thumbnail(url=thumbnail)
|
||||
if image:
|
||||
embed.set_image(url=image)
|
||||
for k, v in fields.items():
|
||||
embed.add_field(name=k, value=v)
|
||||
for name, value in fields.items():
|
||||
embed.add_field(name=name, value=value)
|
||||
if footer:
|
||||
embed.set_footer(text=footer)
|
||||
return embed
|
||||
|
||||
|
||||
async def create_role_if_missing(
|
||||
ctx: commands.Context, role_name: str, role_color: discord.Color
|
||||
):
|
||||
"""Create a role if it does not already exist."""
|
||||
if not role_name in [role.name for role in ctx.guild.roles]:
|
||||
# Create the role
|
||||
role = await ctx.guild.create_role(name=role_name, colour=role_color)
|
||||
await ctx.send(f"> Created `{role}` role.")
|
||||
# Define a list of role members
|
||||
role_members = []
|
||||
# Add the role to all the masters
|
||||
for master in masters:
|
||||
if member := await ctx.guild.fetch_member(master):
|
||||
if role_name in [role.name for role in member.roles]:
|
||||
print(member, member.id, master)
|
||||
await member.add_roles(role)
|
||||
role_members.append(member)
|
||||
# Send a message to show the new role members
|
||||
if role_members:
|
||||
role_members_text = "\n".join(f"+ {member}" for member in role_members)
|
||||
await ctx.send(
|
||||
'```diff\nAdded "'
|
||||
+ role_name
|
||||
+ '" role to:\n'
|
||||
+ role_members_text
|
||||
+ "```"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user