diff --git a/.gitignore b/.gitignore index 2334d82..3a49cb5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ .env -*.log +*.log* diff --git a/Pipfile b/Pipfile index 828b593..c42dbbd 100644 --- a/Pipfile +++ b/Pipfile @@ -10,6 +10,8 @@ python-telegram-bot = "*" toml = "*" ipython = "*" bpython = "*" +requests = "*" +beautifulsoup4 = "*" [requires] python_version = "3.6" diff --git a/Pipfile.lock b/Pipfile.lock index bf13022..9d391cf 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "0cefd20d811ec52fdd5347a47a7ac75dba2afb82d1982af83b983ab33611d7f2" + "sha256": "964c5cf86914a0a6193b9362c4acf3c38aae2c8547959a53810c87d23a9ef3da" }, "pipfile-spec": 6, "requires": { @@ -23,6 +23,15 @@ ], "version": "==0.1.0" }, + "beautifulsoup4": { + "hashes": [ + "sha256:594ca51a10d2b3443cbac41214e12dbb2a1cd57e1a7344659849e2e20ba6a8d8", + "sha256:a4bbe77fd30670455c5296242967a123ec28c37e9702a8a81bd2f20a4baf0368", + "sha256:d4e96ac9b0c3a6d3f0caae2e4124e6055c5dcafde8e2f831ff194c104f0775a0" + ], + "index": "pypi", + "version": "==4.9.0" + }, "blessings": { "hashes": [ "sha256:98e5854d805f50a5b58ac2333411b0482516a8210f23f43308baeb58d77c157d", @@ -33,18 +42,18 @@ }, "bpython": { "hashes": [ - "sha256:56cc20dbe568c98c81de4990fddf5862c0d8d3ab0ad1cf7057988abc5f7686c2", - "sha256:c7c6de7309311fd607d6cb47ef7e2d6e065d0a299199d51220d57732850a3efa" + "sha256:476ce09a896c4d34bf5e56aca64650c56fdcfce45781a20dc1521221df8cc49c", + "sha256:95d95783bfadfa0a25300a648de5aba4423b0ee76b034022a81dde2b5e853c00" ], "index": "pypi", - "version": "==0.18" + "version": "==0.19" }, "certifi": { "hashes": [ - "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3", - "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f" + "sha256:1d987a998c75633c40847cc966fcf5904906c920a7f17ef374f5aa4282abd304", + "sha256:51fcb31174be6e6664c5f69e3e1691a2d72a1a12e90f872cbdb1567eb47b6519" ], - "version": "==2019.11.28" + "version": "==2020.4.5.1" }, "cffi": { "hashes": [ @@ -88,29 +97,27 @@ }, "cryptography": { "hashes": [ - "sha256:02079a6addc7b5140ba0825f542c0869ff4df9a69c360e339ecead5baefa843c", - "sha256:1df22371fbf2004c6f64e927668734070a8953362cd8370ddd336774d6743595", - "sha256:369d2346db5934345787451504853ad9d342d7f721ae82d098083e1f49a582ad", - "sha256:3cda1f0ed8747339bbdf71b9f38ca74c7b592f24f65cdb3ab3765e4b02871651", - "sha256:44ff04138935882fef7c686878e1c8fd80a723161ad6a98da31e14b7553170c2", - "sha256:4b1030728872c59687badcca1e225a9103440e467c17d6d1730ab3d2d64bfeff", - "sha256:58363dbd966afb4f89b3b11dfb8ff200058fbc3b947507675c19ceb46104b48d", - "sha256:6ec280fb24d27e3d97aa731e16207d58bd8ae94ef6eab97249a2afe4ba643d42", - "sha256:7270a6c29199adc1297776937a05b59720e8a782531f1f122f2eb8467f9aab4d", - "sha256:73fd30c57fa2d0a1d7a49c561c40c2f79c7d6c374cc7750e9ac7c99176f6428e", - "sha256:7f09806ed4fbea8f51585231ba742b58cbcfbfe823ea197d8c89a5e433c7e912", - "sha256:90df0cc93e1f8d2fba8365fb59a858f51a11a394d64dbf3ef844f783844cc793", - "sha256:971221ed40f058f5662a604bd1ae6e4521d84e6cad0b7b170564cc34169c8f13", - "sha256:a518c153a2b5ed6b8cc03f7ae79d5ffad7315ad4569b2d5333a13c38d64bd8d7", - "sha256:b0de590a8b0979649ebeef8bb9f54394d3a41f66c5584fff4220901739b6b2f0", - "sha256:b43f53f29816ba1db8525f006fa6f49292e9b029554b3eb56a189a70f2a40879", - "sha256:d31402aad60ed889c7e57934a03477b572a03af7794fa8fb1780f21ea8f6551f", - "sha256:de96157ec73458a7f14e3d26f17f8128c959084931e8997b9e655a39c8fde9f9", - "sha256:df6b4dca2e11865e6cfbfb708e800efb18370f5a46fd601d3755bc7f85b3a8a2", - "sha256:ecadccc7ba52193963c0475ac9f6fa28ac01e01349a2ca48509667ef41ffd2cf", - "sha256:fb81c17e0ebe3358486cd8cc3ad78adbae58af12fc2bf2bc0bb84e8090fa5ce8" + "sha256:0cacd3ef5c604b8e5f59bf2582c076c98a37fe206b31430d0cd08138aff0986e", + "sha256:192ca04a36852a994ef21df13cca4d822adbbdc9d5009c0f96f1d2929e375d4f", + "sha256:19ae795137682a9778892fb4390c07811828b173741bce91e30f899424b3934d", + "sha256:1b9b535d6b55936a79dbe4990b64bb16048f48747c76c29713fea8c50eca2acf", + "sha256:2a2ad24d43398d89f92209289f15265107928f22a8d10385f70def7a698d6a02", + "sha256:3be7a5722d5bfe69894d3f7bbed15547b17619f3a88a318aab2e37f457524164", + "sha256:49870684da168b90110bbaf86140d4681032c5e6a2461adc7afdd93be5634216", + "sha256:587f98ce27ac4547177a0c6fe0986b8736058daffe9160dcf5f1bd411b7fbaa1", + "sha256:5aca6f00b2f42546b9bdf11a69f248d1881212ce5b9e2618b04935b87f6f82a1", + "sha256:6b744039b55988519cc183149cceb573189b3e46e16ccf6f8c46798bb767c9dc", + "sha256:6b91cab3841b4c7cb70e4db1697c69f036c8bc0a253edc0baa6783154f1301e4", + "sha256:7598974f6879a338c785c513e7c5a4329fbc58b9f6b9a6305035fca5b1076552", + "sha256:7a279f33a081d436e90e91d1a7c338553c04e464de1c9302311a5e7e4b746088", + "sha256:95e1296e0157361fe2f5f0ed307fd31f94b0ca13372e3673fa95095a627636a1", + "sha256:9fc9da390e98cb6975eadf251b6e5fa088820141061bf041cd5c72deba1dc526", + "sha256:cc20316e3f5a6b582fc3b029d8dc03aabeb645acfcb7fc1d9848841a33265748", + "sha256:d1bf5a1a0d60c7f9a78e448adcb99aa101f3f9588b16708044638881be15d6bc", + "sha256:ed1d0760c7e46436ec90834d6f10477ff09475c692ed1695329d324b2c5cd547", + "sha256:ef9a55013676907df6c9d7dd943eb1770d014f68beaa7e73250fb43c759f4585" ], - "version": "==2.8" + "version": "==2.9" }, "curtsies": { "hashes": [ @@ -121,10 +128,10 @@ }, "decorator": { "hashes": [ - "sha256:54c38050039232e1db4ad7375cfce6748d7b41c29e95a081c8a6d2c30364a2ce", - "sha256:5d19b92a3c8f7f101c8dd86afd86b0f061a8ce4540ab8cd401fa2542756bce6d" + "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760", + "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7" ], - "version": "==4.4.1" + "version": "==4.4.2" }, "future": { "hashes": [ @@ -161,18 +168,18 @@ }, "idna": { "hashes": [ - "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", - "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" + "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb", + "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa" ], - "version": "==2.8" + "version": "==2.9" }, "ipython": { "hashes": [ - "sha256:d9459e7237e2e5858738ff9c3e26504b79899b58a6d49e574d352493d80684c6", - "sha256:f6689108b1734501d3b59c84427259fd5ac5141afe2e846cfa8598eb811886c9" + "sha256:ca478e52ae1f88da0102360e57e528b92f3ae4316aabac80a2cd7f7ab2efb48a", + "sha256:eb8d075de37f678424527b5ef6ea23f7b80240ca031c2dd6de5879d687a65333" ], "index": "pypi", - "version": "==7.12.0" + "version": "==7.13.0" }, "ipython-genutils": { "hashes": [ @@ -190,10 +197,10 @@ }, "parso": { "hashes": [ - "sha256:56b2105a80e9c4df49de85e125feb6be69f49920e121406f15e7acde6c9dfc57", - "sha256:951af01f61e6dccd04159042a0706a31ad437864ec6e25d0d7a96a9fbb9b0095" + "sha256:0c5659e0c6eba20636f99a04f469798dca8da279645ce5c387315b2c23912157", + "sha256:8515fc12cfca6ee3aa59138741fc5624d62340c97e401c74875769948d4f2995" ], - "version": "==0.6.1" + "version": "==0.6.2" }, "pexpect": { "hashes": [ @@ -212,10 +219,10 @@ }, "prompt-toolkit": { "hashes": [ - "sha256:a402e9bf468b63314e37460b68ba68243d55b2f8c4d0192f85a019af3945050e", - "sha256:c93e53af97f630f12f5f62a3274e79527936ed466f038953dfa379d4941f651a" + "sha256:563d1a4140b63ff9dd587bda9557cffb2fe73650205ab6f4383092fb882e7dc8", + "sha256:df7e9e63aea609b1da3a65641ceaf5bc7d05e0a04de5bd45d05dbeffbabf9e04" ], - "version": "==3.0.3" + "version": "==3.0.5" }, "ptyprocess": { "hashes": [ @@ -226,31 +233,33 @@ }, "pycparser": { "hashes": [ - "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3" + "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", + "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705" ], - "version": "==2.19" + "version": "==2.20" }, "pygments": { "hashes": [ - "sha256:2a3fe295e54a20164a9df49c75fa58526d3be48e14aceba6d6b1e8ac0bfd6f1b", - "sha256:98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe" + "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44", + "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324" ], - "version": "==2.5.2" + "version": "==2.6.1" }, "python-telegram-bot": { "hashes": [ - "sha256:0a97cbca638f949582b4ee326170d2f8d7f4bf559a4e511132bb2203623e04ad", - "sha256:d3cffd020af4094d07c11783f875e5c682072ba7f5bc21ce89ff0222f4e6d742" + "sha256:935397390910291c8e41d7f2a06a3bb13d1d74d78b59562be9f8a330d4527049", + "sha256:c7bdb5788ad2edea5c5c1bc8e50967fad68aa35245c209baadf74fc8ad00ff06" ], "index": "pypi", - "version": "==12.4.2" + "version": "==12.6.1" }, "requests": { "hashes": [ - "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", - "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31" + "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee", + "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6" ], - "version": "==2.22.0" + "index": "pypi", + "version": "==2.23.0" }, "six": { "hashes": [ @@ -259,6 +268,13 @@ ], "version": "==1.14.0" }, + "soupsieve": { + "hashes": [ + "sha256:e914534802d7ffd233242b785229d5ba0766a7f487385e3f714446a07bf540ae", + "sha256:fcd71e08c0aee99aca1b73f45478549ee7e7fc006d51b37bec9e9def7dc22b69" + ], + "version": "==2.0" + }, "toml": { "hashes": [ "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c", @@ -269,15 +285,17 @@ }, "tornado": { "hashes": [ - "sha256:349884248c36801afa19e342a77cc4458caca694b0eda633f5878e458a44cb2c", - "sha256:398e0d35e086ba38a0427c3b37f4337327231942e731edaa6e9fd1865bbd6f60", - "sha256:4e73ef678b1a859f0cb29e1d895526a20ea64b5ffd510a2307b5998c7df24281", - "sha256:559bce3d31484b665259f50cd94c5c28b961b09315ccd838f284687245f416e5", - "sha256:abbe53a39734ef4aba061fca54e30c6b4639d3e1f59653f0da37a0003de148c7", - "sha256:c845db36ba616912074c5b1ee897f8e0124df269468f25e4fe21fe72f6edd7a9", - "sha256:c9399267c926a4e7c418baa5cbe91c7d1cf362d505a1ef898fde44a07c9dd8a5" + "sha256:0fe2d45ba43b00a41cd73f8be321a44936dc1aba233dee979f17a042b83eb6dc", + "sha256:22aed82c2ea340c3771e3babc5ef220272f6fd06b5108a53b4976d0d722bcd52", + "sha256:2c027eb2a393d964b22b5c154d1a23a5f8727db6fda837118a776b29e2b8ebc6", + "sha256:5217e601700f24e966ddab689f90b7ea4bd91ff3357c3600fa1045e26d68e55d", + "sha256:5618f72e947533832cbc3dec54e1dffc1747a5cb17d1fd91577ed14fa0dc081b", + "sha256:5f6a07e62e799be5d2330e68d808c8ac41d4a259b9cea61da4101b83cb5dc673", + "sha256:c58d56003daf1b616336781b26d184023ea4af13ae143d9dda65e31e534940b9", + "sha256:c952975c8ba74f546ae6de2e226ab3cc3cc11ae47baf607459a6728585bb542a", + "sha256:c98232a3ac391f5faea6821b53db8db461157baa788f5d6222a193e9456e1740" ], - "version": "==6.0.3" + "version": "==6.0.4" }, "traitlets": { "hashes": [ @@ -295,10 +313,10 @@ }, "wcwidth": { "hashes": [ - "sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603", - "sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8" + "sha256:cafe2186b3c009a04067022ce1dcd79cb38d8d65ee4f4791b8888d6599d1bbe1", + "sha256:ee73862862a156bf77ff92b09034fc4825dd3af9cf81bc5b360668d425f3c5f1" ], - "version": "==0.1.8" + "version": "==0.1.9" } }, "develop": {} diff --git a/etc/klafytg/bots.d/chuck.toml b/etc/klafytg/bots.d/chuck.toml index aac3f18..6c6c859 100644 --- a/etc/klafytg/bots.d/chuck.toml +++ b/etc/klafytg/bots.d/chuck.toml @@ -9,7 +9,7 @@ min_time = 3 admins = [ 452970435 # klafyvel ] -[ping] +[cmd.ping] quotes = [] python = [ 'klafytg.bots.chuck_norris.on_ping' diff --git a/etc/klafytg/bots.d/gutzwi.toml b/etc/klafytg/bots.d/gutzwi.toml index 7a01f9e..93f134b 100644 --- a/etc/klafytg/bots.d/gutzwi.toml +++ b/etc/klafytg/bots.d/gutzwi.toml @@ -13,7 +13,7 @@ channels = [ admins = [ 452970435 # klafyvel ] -[ping] +[cmd.ping] quotes = [ "Les ordinateurs, c'est comme les galères romaines : moins il y a de RAM, et plus ça rame !", "Il pédale dans la choucroute !", diff --git a/etc/klafytg/bots.d/houzelle.toml b/etc/klafytg/bots.d/houzelle.toml index 3f13180..3f405ec 100644 --- a/etc/klafytg/bots.d/houzelle.toml +++ b/etc/klafytg/bots.d/houzelle.toml @@ -13,7 +13,7 @@ channels = [ admins = [ 452970435 # klafyvel ] -[ping] +[cmd.ping] quotes = [ "C'est très simple.", "C'est facile.", diff --git a/etc/klafytg/bots.d/klafyvel.toml b/etc/klafytg/bots.d/klafyvel.toml new file mode 100644 index 0000000..68f0e84 --- /dev/null +++ b/etc/klafytg/bots.d/klafyvel.toml @@ -0,0 +1,38 @@ +[bot] +name = "Klafyvel" +# Name of the environment variable to fetch +token = "KLAFYTOKEN" +# time between interventions in seconds +min_time = 3 +# If channel is specified, only specified channels are authorized. +# channels = [] +admins = [ + 452970435 # klafyvel +] +inline = "attack" +[cmd.ping] +quotes = [ + "Parti me baigner dans le sang de nouveaux nés avec mes potes communistes, déso.", + "Je te foutrais tout ça au goulag.", + "Y a plus qu'à nationaliser.", + "Hop un salaire universel.", + "J'arrive pas à savoir si être de droite rend con ou si c'est juste un pré-requis.", + "Un laser, c'est assez simple: vous voyez des coconuts dans une piscine ? c'est déjà un bon début.", + "Un soliton c'est pas bien compliqué. Ça revient à faire courir un gros, un sportif et un moyen sur un matelas géant. Oui on dirait le début d'une blague offensante. Non les solitons ne sont pas offensants.", + "Macron démission.", + "Le mérite est une construction sociale.", +] +[match] +[join] +[cmd.attack] +python = [ + 'klafytg.bots.klafyvel.on_attack' +] +[cmd.help] +quotes = [ + "I don't do much, but I can /attack 😏" +] +[cmd.start] +quotes = [ + "I don't do much, but I can /attack 😏" +] diff --git a/etc/klafytg/bots.d/macron.toml b/etc/klafytg/bots.d/macron.toml index 82520af..6198529 100644 --- a/etc/klafytg/bots.d/macron.toml +++ b/etc/klafytg/bots.d/macron.toml @@ -13,7 +13,7 @@ channels = [ admins = [ 452970435 # klafyvel ] -[ping] +[cmd.ping] quotes = [ "PARCE QUE C'EST NOTRE PROJEEEET !", "C'est de la poudre de perlimpinpin.", diff --git a/etc/klafytg/bots.d/patou.toml b/etc/klafytg/bots.d/patou.toml index f205c2d..2d5bf94 100644 --- a/etc/klafytg/bots.d/patou.toml +++ b/etc/klafytg/bots.d/patou.toml @@ -13,7 +13,7 @@ channels = [ admins = [ 452970435 # klafyvel ] -[ping] +[cmd.ping] quotes = [ "En parlant de ça, Centrale ne sait vraiment pas travailler en multicampus", "On avait ouvert une voie d'escalade sur une des façades de la résidence", diff --git a/etc/klafytg/bots.d/sciamana.toml b/etc/klafytg/bots.d/sciamana.toml index e327927..150f753 100644 --- a/etc/klafytg/bots.d/sciamana.toml +++ b/etc/klafytg/bots.d/sciamana.toml @@ -13,7 +13,7 @@ channels = [ admins = [ 452970435 # klafyvel ] -[ping] +[cmd.ping] quotes = [ "Ça me désole quand munme.", "Le monde va mal, vous savez. Faites HEC.", diff --git a/etc/klafytg/bots.d/sel.toml b/etc/klafytg/bots.d/sel.toml index dd085d5..d8e29a3 100644 --- a/etc/klafytg/bots.d/sel.toml +++ b/etc/klafytg/bots.d/sel.toml @@ -14,7 +14,7 @@ channels = [ admins = [ 452970435 # klafyvel ] -[ping] +[cmd.ping] quotes = [ "Arcas:`à viarezo ils font des caleçons.` Chibrac:`bah non au rezo, à viarezo ils ont pas de boules à couvrir`", "Les lentilles c'est extrêmement pratique de base pour toute personne active [wink-wink Chibrac, NDLR]", diff --git a/klafytg.service b/klafytg.service index a420a0b..fae2a99 100644 --- a/klafytg.service +++ b/klafytg.service @@ -1,14 +1,13 @@ [Unit] -Description=Klafyirc bots -After=network-online.target +Description=Klafyvel telegram bots. +After=network.target [Service] +User=klafyvel +Restart=always Type=simple - -User=root -Group=root - -ExecStart=/usr/bin/python3 -m klafirc +WorkingDirectory=/usr/local/klafytg +ExecStart=/usr/local/bin/pipenv run python -m /usr/local/klafytg/klafytg [Install] WantedBy=multi-user.target diff --git a/klafytg/bot.py b/klafytg/bot.py index 9d04685..723e717 100644 --- a/klafytg/bot.py +++ b/klafytg/bot.py @@ -31,28 +31,62 @@ class Bot: for k in self.config["match"].keys(): self.add_reaction(k, self.config["match"][k]) - self.pings = [] - for quote in self.config["ping"].get("quotes", []): - self.add_ping(quote) - for python in self.config["ping"].get("python", []): - self.add_python_ping(python) - for channel in self.config["bot"].get("channels", []): self.channels[int(channel)] = datetime.datetime(1,1,1) self.all_channel_allowed = not self.config["bot"].get("channels", []) + self.inline = self.config["bot"].get("inline", "ping") + + self.commands = {} self.updater = Updater(token=os.environ[self.config["bot"]["token"]], use_context=True) self.dispatcher = self.updater.dispatcher - self.quote_handler = CommandHandler('ping', self.on_ping) + for command in self.config.get("cmd", {}).keys(): + self.create_cmd(command) + handler = CommandHandler(command, getattr(self, "on_"+command)) + self.dispatcher.add_handler(handler) + self.match_handler = MessageHandler(Filters.text, self.on_message) self.inline_quote_handler = InlineQueryHandler(self.on_inline) self.dispatcher.add_handler(self.inline_quote_handler) - self.dispatcher.add_handler(self.quote_handler) self.dispatcher.add_handler(self.match_handler) + + def create_cmd(self, name): + self.commands[name] = [] + for quote in self.config["cmd"][name].get("quotes", []): + self.commands[name].append(quote) + for python in self.config["cmd"][name].get("python", []): + self.commands[name].append(self.fetch_callback(python)) + + def fun(update, context): + if not self.is_allowed(update, context): + context.bot.send_message( + chat_id=update.effective_chat.id, + text="Sorry, mamma told me not to talk with random strangers. You need to allow chat id {}.".format(update.effective_chat.id), + reply_to_message_id=update.effective_message.message_id + ) + return + quote = random.choice(self.commands[name]) + if callable(quote): + quote = quote(self, update, context) + else: + c = { + "channel": update.effective_chat.title, + "name": self.name, + "user": update.effective_user.name, + "message": update.effective_message.text, + } + quote = quote.format(**c) + + if quote: + context.bot.send_message(chat_id=update.effective_chat.id, text=quote, reply_to_message_id=update.effective_message.message_id) + + setattr(self, 'on_'+name, fun) + + def is_allowed(self, update, context): if self.all_channel_allowed: return True @@ -82,7 +116,7 @@ class Bot: "user": update.effective_user.name, "message": getattr(update.effective_message, "text", ""), } - for i,quote in enumerate(self.pings): + for i,quote in enumerate(self.commands.get(self.inline, [])): actual_quote = "" if not callable(quote): actual_quote = quote.format(**c) @@ -99,28 +133,6 @@ class Bot: context.bot.answer_inline_query(update.inline_query.id, results) - - def on_ping(self, update, context): - if not self.is_allowed(update, context): - context.bot.send_message( - chat_id=update.effective_chat.id, - text="Sorry, mamma told me not to talk with random strangers. You need to allow chat id {}.".format(update.effective_chat.id), - reply_to_message_id=update.effective_message.message_id - ) - return - c = { - "channel": update.effective_chat.title, - "name": self.name, - "user": update.effective_user.name, - "message": update.effective_message.text, - } - quote = random.choice(self.pings) - if callable(quote): - quote = quote(self, update.effective_user, update.effective_chat, update.effective_message) - else: - quote = quote.format(**c) - context.bot.send_message(chat_id=update.effective_chat.id, text=quote, reply_to_message_id=update.effective_message.message_id) - def on_message(self, update, context): if not self.is_allowed(update, context): return @@ -149,14 +161,6 @@ class Bot: """ self.add_reaction(match, self.fetch_callback(reaction)) - def add_ping(self, reaction): - """Add a reaction to a ping""" - self.pings.append(reaction) - - def add_python_ping(self, reaction): - """Fetch a Python callable and add it to the pings""" - self.add_ping(self.fetch_callback(reaction)) - def fetch_callback(self, path): """Fetch a Python callable""" s = path.split(".") @@ -175,7 +179,7 @@ class Bot: Returns: Every matched reactions. """ - if (datetime.datetime.now() - self.channels[channel.id]).total_seconds() < self.min_time: + if channel.id in self.channels and (datetime.datetime.now() - self.channels[channel.id]).total_seconds() < self.min_time: return [] context = { diff --git a/klafytg/bots/klafyvel.py b/klafytg/bots/klafyvel.py new file mode 100644 index 0000000..3f70561 --- /dev/null +++ b/klafytg/bots/klafyvel.py @@ -0,0 +1,50 @@ +import requests +from bs4 import BeautifulSoup +import random + +URL_BASE = "https://crisco2.unicaen.fr/des/synonymes/" + + +def synonyms(word): + page = requests.get(URL_BASE+word) + soup = BeautifulSoup(page.text, features="html.parser") + syn = soup.find_all(id='synonymes')[0] + buff = syn.div + while buff != " Fin titre (vedette + nb de synonymes)": + buff = buff.next_sibling + while buff != "Fin liste des synonymes": + if buff.name and buff.name == "a": + yield buff.string + buff = buff.next_sibling + +def make_corpus(start, max_depth=2, exclude=set()): + if max_depth <= 0: + return start + res = set(start) + for word in start: + syn = set(synonyms(word)) + res = res.union(make_corpus((syn - res) - exclude, max_depth-1, res.union(syn))) + return res + + +adjectives_seed = {"idiot"} +nuns_seed = {"patriarcat", "capitaliste", "banquier"} +adjectives = list(make_corpus(adjectives_seed).union(adjectives_seed)) +nuns = list(make_corpus(nuns_seed).union(nuns_seed)) + +def attack(): + adj = str.capitalize(random.choice(adjectives)) + nun = random.choice(nuns) + if nun[0] in 'aeiouéàè': + link = "d'" + else: + link = "de " + return ' '.join([adj, link+nun, '!']) + +def on_attack(bot, update, context): + # you can choose to reply here or to simply return a str wich will be returned. + context.bot.send_message( + chat_id=update.effective_chat.id, + text=attack(), + reply_to_message_id=update.effective_message.message_id + )