Browse Source

over engineered bots a little more.

merge-requests/1/head
Hugo Levy-Falk 6 years ago
parent
commit
cc05c9521b
  1. 2
      .gitignore
  2. 2
      Pipfile
  3. 152
      Pipfile.lock
  4. 2
      etc/klafytg/bots.d/chuck.toml
  5. 2
      etc/klafytg/bots.d/gutzwi.toml
  6. 2
      etc/klafytg/bots.d/houzelle.toml
  7. 38
      etc/klafytg/bots.d/klafyvel.toml
  8. 2
      etc/klafytg/bots.d/macron.toml
  9. 2
      etc/klafytg/bots.d/patou.toml
  10. 2
      etc/klafytg/bots.d/sciamana.toml
  11. 2
      etc/klafytg/bots.d/sel.toml
  12. 13
      klafytg.service
  13. 84
      klafytg/bot.py
  14. 50
      klafytg/bots/klafyvel.py

2
.gitignore

@ -1,2 +1,2 @@
.env
*.log
*.log*

2
Pipfile

@ -10,6 +10,8 @@ python-telegram-bot = "*"
toml = "*"
ipython = "*"
bpython = "*"
requests = "*"
beautifulsoup4 = "*"
[requires]
python_version = "3.6"

152
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"
],
"version": "==2.8"
"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.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": {}

2
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'

2
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 !",

2
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.",

38
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 😏"
]

2
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.",

2
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",

2
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.",

2
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]",

13
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

84
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 = {

50
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
)
Loading…
Cancel
Save