diff --git a/.gitignore b/.gitignore
index 8848aea6e6ca70683e8db8a75100255fc80a0fa7..6faaeb90085708717bc7f5b42f327309ded7f2b3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 auth_file.py
-sample*
+sample_in.jpg
+sample_out.jpg
 insta_random.jpg
 shitpostbot5k_latest.jpg
-*__pycache__/*
+__pycache__/*
diff --git a/bot.py b/bot.py
index 8d249cc7345fdffb89b792727317f9dd326a7103..051f1bff43c1ff5f3c39bcc6a3ba82b8b7dd2519 100755
--- a/bot.py
+++ b/bot.py
@@ -15,7 +15,7 @@ translator = Translator()
 
 
 class Bot(Client):
-    ahah_liste = ['ahah', 'mdr', 'lol', 'Mort de rire !', 'Trop marrant', 'tu m\'as tué', 'xD', 'PTDR']
+    ahah_liste = ['ahah', 'mdr', 'lol', 'Mort de rire !', 'Trop marrant', 'xD', 'PTDR']
     what_liste = ['wat', 'What', 'Nani', 'keske', 'dafuk', 'da fuk']
     quizzes = {}
     shitpostbot = {}
@@ -27,18 +27,16 @@ class Bot(Client):
 
         log.info("{} from {} in {}".format(message_object, thread_id, thread_type.name))
 
-        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:
-            if len(to_send) > 30:
-                self.send(Message("\n".join(to_send.split('\n')[: len(to_send) // 2])), thread_id=thread_id, thread_type=thread_type)
-                sleep(2)
-                self.send(Message("\n".join(to_send.split('\n')[len(to_send) // 2:])), thread_id=thread_id, thread_type=thread_type)
-            else:
+        # pour éviter le spam... et oui j'ai fait cette erreur là.....
+        if author_id != self.uid:
+            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 to_send is not None:
                 self.send(Message(to_send), thread_id=thread_id, thread_type=thread_type)
+                sleep(2)
 
-        elif author_id != self.author_id:
             self.trigger_double_mots(message_object.text, thread_id, thread_type)
-        # self.shitpostbot5000()
+            # self.shitpostbot5000()
 
     def shitpostbot5000(self):
         for chan in Bot.shitpostbot:
@@ -47,6 +45,7 @@ class Bot(Client):
                     print('Shitpostbot5000 a dégoté une nouvelle image...')
                     self.sendLocalImage(Bot.shitpostbot[chan][0].get_out(), thread_id=chan, thread_type=Bot.shitpostbot[chan][1])
 
+    # TODO: move test in a standard module to use it with different bots
     def tests(self, texte, thread_id, thread_type, author_id, channel=''):
 
         if texte == '!help':
@@ -70,10 +69,11 @@ class Bot(Client):
                 '!memes <image_name_or_url> ; <texte1> ; <texte2(facultatif)>\n' + \
                 '!ping \n' + \
                 '!translate <phrase> ; <lang_source> ; <lang_dest>\n' + \
-                '!shitpostbot5000 [status|on|off|random <keyword(facultatif)>|timer] ... ne pas utiliser PLEASE\n' + \
+                '!shitpostbot5000 [status|on|off|random <keyword(facultatif)>] ... ne pas utiliser PLEASE\n' + \
                 '!title <newtitle>\n'\
+                '!listuser <newtitle>\n'\
                 '!about -> vas-y test-moi !\n'
-            return help_text
+            return 'Hummmm non j\'ai la flemme là'
         elif '!translate' in texte:
             texte = texte.replace('!translate ', '').split(' ; ')
             try:
@@ -95,7 +95,9 @@ class Bot(Client):
         elif '!title ' in texte:
             texte = texte.replace("!title ", '')
             client.changeThreadTitle(texte, thread_id=thread_id, thread_type=thread_type)
+
         # renomer qqn
+        # FIXME: make rename command work
         elif '!rename' in texte:
             texte = texte.replace('!rename ', '').split(' ; ')
             for user in self.fetchAllUsersFromThreads([self.fetchThreadInfo(thread_id)[thread_id]]):
@@ -103,7 +105,9 @@ class Bot(Client):
                     self.changeNickname(nickname=texte[1], user_id=user.uid, thread_id=thread_id, thread_type=thread_type)
                 else:
                     return random.choice(['T\'es sur de ton coup là ?', 'chais pas qui c\'est...'])
-        # kick qqn d'un group
+
+        # TODO: test remove
+        # kick qqn d'un groupe
         elif '!remove ' in texte and thread_type == ThreadType.GROUP:
             texte = texte.replace('!remove ', '').split(' ; ')
             user_to_remove = None
@@ -127,6 +131,7 @@ class Bot(Client):
             return "la liste des gens dans le groupe :\n\n" "".join([user.name for user in self.fetchAllUsersFromThreads([self.fetchThreadInfo(thread_id)[thread_id]])])
 
         # réinviter le dernier mec kické du group
+        # TODO: test reinvite
         elif texte == '!reinvite':
             if 'thread_id' in Bot.kicked:
                 self.addUsersToGroup(Bot.kicked[thread_id][-1].uid, thread_id=thread_id)
@@ -151,6 +156,7 @@ class Bot(Client):
                 return 'T\'es débile ou quoi ? Je peux pas réinviter des gens que je n\'ai pas kické moi même en fait... \n\n\n Hummmm par contre je pourais éventuellement inviter des random mec...ou meuf...'
 
         # SHitpostbot5000
+        # TODO: shitpostbot5000 random auto with timer
         elif texte == '!shitpostbot5000 on':
             if thread_id not in Bot.shitpostbot:
                 Bot.shitpostbot[thread_id] = [useless.Shitpostbot5000(), thread_type]
@@ -171,8 +177,10 @@ class Bot(Client):
                 self.sendLocalImage(useless.Shitpostbot5000.random(texte), thread_id=thread_id, thread_type=thread_type)
 
         # générateur de memes
-        elif any(words in texte for words in ['!memes templates', '!memes help', '!help memes']):
+        elif texte == '!memes templates':
             return useless.Memes.get_templates()
+        elif texte == '!memes help':
+            return useless.Memes.get_help()
 
         elif '!memes ' in texte:
             texte = texte.replace('!memes ', '').split(' ; ')
@@ -187,7 +195,7 @@ class Bot(Client):
                 self.sendLocalImage(meme.get_result(), thread_id=thread_id, thread_type=thread_type)
                 sleep(2)
             except:
-                return 'Ya un petit problème dans la plantation...'
+                return 'Ya un problème dans la plantation...'
 
         elif any(word.lower() in texte.lower() for word in ["let\'s go", "c'est parti", "go ", "allons "]):
             return 'é zé bardi !'
@@ -260,7 +268,7 @@ class Bot(Client):
             except:
                 return 'Houston, on a un problème...'
         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 !'
+            return 'Hello, je suis A.N.U.B.I.S. A Not Usefull But Intelligent System, petit frère de nardco 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:
@@ -269,7 +277,7 @@ class Bot(Client):
         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)
+            return random.choice(Bot.what_liste) + '?!'
 
         # doit rester à la fin des elif
         elif '!' in texte and not any(word in texte for word in [' ! ', '! ', ' !']):
diff --git a/useless/memes.py b/useless/memes.py
index 9793ff5bbf7ffdd98b6ca4d5a2ee08b621370b2f..e1e03189ed275a238abb276232afc344ee583fad 100755
--- a/useless/memes.py
+++ b/useless/memes.py
@@ -1,6 +1,8 @@
 #!/usr/bin/python3
 # module qui fait des memes
+# TODO: a google drive feature where you can upload new templates
 # -*- coding: utf-8 -*-
+
 import PIL
 from PIL import ImageFont
 from PIL import Image
@@ -119,7 +121,11 @@ class Memes(object):
 
     @classmethod
     def get_templates(self):
-        return 'Faut apprendre à lire un man les gars :\n !memes image_name_or_url ; texte1(OBLIGATOIRE) ; texte2(facultatif)\n\n sinon tu peux voir les templates ici : shorturl.at/bcjA8\n\n Tiens voilà la liste de mes images préenregistrées :\n' + "\n".join(Memes.images.keys())
+        return 'Tiens voilà la liste de mes images préenregistrées :\n' + "\n".join(Memes.images.keys())
+
+    @classmethod
+    def get_help(self):
+        return 'Faut apprendre à lire un man les gars :\n !memes image_name_or_url ; texte1(OBLIGATOIRE) ; texte2(facultatif)\n\n sinon tu peux voir les templates ici : shorturl.at/bcjA8'
 
 
 if __name__ == '__main__':
@@ -128,5 +134,5 @@ if __name__ == '__main__':
         try:
             meme1 = Memes(image, 'test1 lol !', 'test2 mdr ?')
             file = meme1.process()
-        except:
-            print('erreur sur ' + image)
+        except Exception as e:
+            print('erreur sur %s : %s' % (image, e))