From 4fc69166d5de6d7af73094cb1fa51823b7bfa4dc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lo=C3=AFc=20Wikle=20DUBARD?= <loic97429@gmail.com>
Date: Tue, 20 Aug 2019 09:01:01 +0200
Subject: [PATCH] shitpostbot500 + double trigger

---
 bot.py                   | 109 ++++++++++++++++++++++++++++-----------
 shitpostbot5k_latest.jpg | Bin 0 -> 20967 bytes
 useless/__init__.py      |   3 +-
 useless/shitpostbot5k.py |  52 +++++++++++++++++++
 4 files changed, 134 insertions(+), 30 deletions(-)
 create mode 100644 shitpostbot5k_latest.jpg
 create mode 100755 useless/shitpostbot5k.py

diff --git a/bot.py b/bot.py
index a99fbd4..c1d13c6 100755
--- a/bot.py
+++ b/bot.py
@@ -9,13 +9,14 @@ import usefull
 import random
 from auth_file import USERNAME, PASSWORD
 from googletrans import Translator
+import threading
 translator = Translator()
-quizzes = {}
-
 
 class Bot(Client):
     ahah_liste = ['ahah', 'mdr', 'lol', 'Mort de rire !', 'Trop marrant', 'tu m\'as tué', 'xD', 'PTDR']
     what_liste = ['wat', 'What', 'Nani', 'keske', 'dafuk', 'da fuk']
+    Bot.quizzes = {}
+    shitpostbot = {}
 
     def onMessage(self, author_id, message_object, thread_id, thread_type, **kwargs):
         self.markAsDelivered(thread_id, message_object.uid)
@@ -23,14 +24,22 @@ class Bot(Client):
 
         log.info("{} from {} in {}".format(message_object, thread_id, thread_type.name))
 
-        if 'Ah' in message_object.text:
-            self.sendLocalImage('images/ah.png', thread_id=thread_id, thread_type=thread_type)
-
         to_send = self.tests(message_object.text, thread_id=thread_id, thread_type=thread_type, author_id=author_id, channel=self.fetchThreadInfo(thread_id)[thread_id].name)
         if (author_id != self.uid or 'BOT :' not in message_object.text) and to_send is not None:
             self.send(Message('BOT :' + to_send), thread_id=thread_id, thread_type=thread_type)
 
+        self.trigger_double_mots(message_object.text, thread_id, thread_type)
+        Bot.shitpostbot5000()
+
+    @classmethod
+    def shitpostbot5000(self):
+        for chan in Bot.shitpostbot:
+            if Bot.shitpostbot[chan][0].get_status():
+                if Bot.shitpostbot[chan][0].get_latest():
+                    self.sendLocalImage(Bot.shitpostbot[chan][0].get_out(), thread_id=chan, thread_type=Bot.shitpostbot[chan][1])
+
     def tests(self, texte, thread_id, thread_type, author_id, channel=''):
+
         if texte == '!help':
             help_text = 'Ce que je sais faire :\n  \
             !meteo <ville> ; <pays> ; <dans_n_heure(facultatif)>\n \
@@ -50,6 +59,7 @@ class Bot(Client):
             !memes <image_name_or_url> ; <texte1> ; <texte2(facultatif)>  ... not yet implemented\n\
             !ping \n\
             !translate <phrase> ; <lang_source> ; <lang_dest>\n\
+            !shitpostbot5000 [status|on|off|random] ... ne pas utiliser PLEASE\n\
             !about -> vas-y test-moi !\n'
             return help_text
         elif '!translate' in texte:
@@ -79,9 +89,23 @@ class Bot(Client):
                 else:
                     return random.choice(['T\'es sur de ton coup là ?', 'chais pas qui c\'est...'])
 
+        # SHitpostbot5000
+        elif texte == '!shitpostbot5000 on':
+            if thread_id not in Bot.shitpostbot:
+                Bot.shitpostbot[thread_id] = [useless.Shitpostbot5000(), thread_type]
+            Bot.shitpostbot[thread_id][0].set_on()
+        elif texte == '!shitpostbot5000 status':
+            if thread_id not in Bot.shitpostbot:
+                return 'Ce truc n\'est pas activé et doit, à mon avis rester éteint...'
+            else:
+                return 'Eh oui, c\'est trop tard, le démon est déjà à l\'oeuvre' if Bot.shitpostbot[thread_id][0].get_status() else 'Le diable se repose...'
+        elif texte == '!shitpostbot5000 off':
+            if thread_id in Bot.shitpostbot:
+                Bot.shitpostbot[thread_id][0].set_off()
+        elif texte == '!shitpostbot5000 random':
+            self.sendLocalImage(Shitpostbot5000.random(), thread_id=thread_id, thread_type=thread_type)
+
         # pour rigoler
-        elif any(word.lower() in texte.lower() for word in Bot.what_liste):
-            return random.choice(Bot.what_liste)
         elif '!memes templates' in texte:
             return useless.Memes.get_templates()
         elif '!memes ' in texte:
@@ -100,8 +124,8 @@ class Bot(Client):
 
         elif any(word.lower() in texte.lower() for word in ["let\'s go", "c'est parti", "go ", "allons "]):
             return 'é zé bardi !'
-        elif any(word.lower() in texte.lower() for word in ['noice ', 'nice ']):
-            self.send(Message(text="👍", emoji_size=EmojiSize.LARGE), thread_id=thread_id, thread_type=thread_type)
+        elif any(word.lower() in texte.lower().split(' ') for word in ['noice', 'nice']):
+            self.sendEmoji(emoji="👍", size=EmojiSize.LARGE, thread_id=thread_id, thread_type=thread_type)
             # self.send(Message(emoji_size=EmojiSize.LARGE), thread_id=thread_id, thread_type=thread_type)
         elif '!kohlanta' in texte:
             texte = texte.replace('!kohlanta ', '')
@@ -110,42 +134,40 @@ class Bot(Client):
             return useless.pipo('useless/pipotron.txt')
         elif texte == '!ping':
             return 'Pong !'
-        elif any(word.lower() in texte.lower() for word in Bot.ahah_liste):
-            return random.choice(Bot.ahah_liste)
         elif texte == '!rateau':
             return useless.getRateau()
 
         # petit jeu de quizz
         elif '!quizz' in texte:
             if 'start' in texte:
-                if thread_id not in quizzes.keys():
-                    quizzes[thread_id] = useless.Quizz()
-                return quizzes[thread_id].start()
-            elif thread_id not in quizzes.keys():
+                if thread_id not in Bot.quizzes.keys():
+                    Bot.quizzes[thread_id] = useless.Quizz()
+                return Bot.quizzes[thread_id].start()
+            elif thread_id not in Bot.quizzes.keys():
                 return 'Perdu ! T\'as oublié de lancer une game looser'
             if 'new' in texte:
-                return quizzes[thread_id].new()
+                return Bot.quizzes[thread_id].new()
             if 'scoreboard' in texte:
                 if texte.replace('!quizz scoreboard ', '') != '':
-                    return quizzes[thread_id].scoreboard(texte.replace('!quizz scoreboard ', ''))
+                    return Bot.quizzes[thread_id].scoreboard(texte.replace('!quizz scoreboard ', ''))
                 else:
-                    return quizzes[thread_id].scoreboard()
+                    return Bot.quizzes[thread_id].scoreboard()
             if 'reset' in texte:
-                return quizzes[thread_id].reset()
+                return Bot.quizzes[thread_id].reset()
             if 'indice' in texte:
-                return quizzes[thread_id].indice()
+                return Bot.quizzes[thread_id].indice()
             if 'round' in texte:
-                return quizzes[thread_id].get_round()
+                return Bot.quizzes[thread_id].get_round()
             if 'question' in texte:
-                return quizzes[thread_id].get_question()
-        elif '!q ' in texte and thread_id in quizzes.keys():
+                return Bot.quizzes[thread_id].get_question()
+        elif '!q ' in texte and thread_id in Bot.quizzes.keys():
             personne = self.fetchUserInfo(author_id)[author_id].name
             print(personne)
-            return quizzes[thread_id].answer(texte.replace('!q ', ''), personne)
-        elif "!indice" in texte and thread_id in quizzes.keys():
-            return quizzes[thread_id].indice()
-        elif "!scoreboard" in texte and thread_id in quizzes.keys():
-            return quizzes[thread_id].scoreboard()
+            return Bot.quizzes[thread_id].answer(texte.replace('!q ', ''), personne)
+        elif "!indice" in texte and thread_id in Bot.quizzes.keys():
+            return Bot.quizzes[thread_id].indice()
+        elif "!scoreboard" in texte and thread_id in Bot.quizzes.keys():
+            return Bot.quizzes[thread_id].scoreboard()
 
         # meteo
         elif '!meteo' in texte:
@@ -170,10 +192,39 @@ class Bot(Client):
                 return usefull.maps(texte.replace('!maps ', ''))
             except:
                 return 'Houston, on a un problème...'
-        elif texte == '!about':
+        elif texte == '!about' or texte == '!cyborg':
             return 'Hello, je suis A.N.U.B.I.S. A Not Usefull But Intelligent System, créé par le talentueux LawiK aka Wikle aka Cyborg aka Loïc Dub que je vénère !'
+
+        # les triggers en tout genre
+        elif 'Ah' in texte:
+            self.sendLocalImage('images/ah.png', thread_id=thread_id, thread_type=thread_type)
+        elif any(word.lower() in texte.lower() for word in Bot.ahah_liste):
+            return random.choice(Bot.ahah_liste)
+        elif any(word.lower() in texte.lower() for word in Bot.what_liste):
+            return random.choice(Bot.what_liste)
+
+        # doit rester à la fin des elif
+        elif '!' in texte and not any(word in texte for word in [' ! ', '! ', ' !']):
+            return 'Gné ?'
+
         return None
 
+    def trigger_double_mots(self, texte, thread_id, thread_type):
+        # genre coucou coucou donnera : Oh, coucoucou c'est marrant ça... et faire faire donnera faifaire
+        texte = texte.split(' ')
+        indice = len(texte)
+        voyelles = ['a', 'e', 'i', 'o', 'u', 'y']
+        for i in range(len(texte) - 1):
+            if texte[i] == texte[i + 1]:
+                for v in voyelles:
+                    if texte[i].find(v) != -1:
+                        indice = min(texte[i].find(v), indice)
+                if texte[i][indice] in voyelles:
+                    indice += 1
+                mot = texte[i][:indice + 1] + texte[i]
+                self.sendMessage(message="Oh, {} c'est marrant ça...".format(mot), thread_id=thread_id, thread_type=thread_type)
+                return None
+
 
 if __name__ == '__main__':
 
diff --git a/shitpostbot5k_latest.jpg b/shitpostbot5k_latest.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..85a5246aca2a59a33b4ebdde90929414dc6b771c
GIT binary patch
literal 20967
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

literal 0
HcmV?d00001

diff --git a/useless/__init__.py b/useless/__init__.py
index c871796..0fddb37 100644
--- a/useless/__init__.py
+++ b/useless/__init__.py
@@ -9,4 +9,5 @@ from .pipotron import pipo
 from .haddock import haddock
 from .quizz import Quizz
 from .kohlanta import *
-from .memes import Memes
\ No newline at end of file
+from .memes import Memes
+from .shitpostbot5k import *
\ No newline at end of file
diff --git a/useless/shitpostbot5k.py b/useless/shitpostbot5k.py
new file mode 100755
index 0000000..5236ef8
--- /dev/null
+++ b/useless/shitpostbot5k.py
@@ -0,0 +1,52 @@
+#!/usr/bin/python3
+from urllib.request import urlopen
+from bs4 import BeautifulSoup
+import re
+import urllib.request
+import datetime
+
+
+class Shitpostbot5000(object):
+    def __init__(self, out="shitpostbot5k_latest.jpg"):
+        self.state = False
+        self.image = ''
+        self.date = datetime.datetime.now()
+        self.out = out
+
+    def get_latest(self):
+        if datetime.datetime.now() > self.date + datetime.timedelta(minutes=30):
+            html = urlopen('https://www.facebook.com/shitpostbot5k/feed')
+            bs = BeautifulSoup(html, 'html.parser')
+            image = bs.find_all('img', {'src': re.compile('.jpg')})[-1]['src']
+            if image != self.image:
+                urllib.request.urlretrieve(image, self.out)
+                self.image = image
+                self.date = datetime.datetime.now()
+                return True  # new one !
+        return False  # nothing new
+
+    def get_status(self):
+        return self.state
+
+    def set_on(self):
+        self.state = True
+
+    def set_off(self):
+        self.state = False
+
+    def get_out(self):
+        return self.out
+
+    @classmethod
+    def random(self):
+        html = urlopen('https://www.facebook.com/pg/shitpostbot5k/photos')
+        bs = BeautifulSoup(html, 'html.parser')
+        images = bs.find_all('img', {'src': re.compile('.jpg')})
+        images2 = bs.find_all('image_src')
+        for image in images:
+            print(image["src"])
+        return None
+
+if __name__ == "__main__":
+    img = Shitpostbot5000()
+    print(img.get_latest())
-- 
GitLab