diff --git a/CHANGELOG.md b/CHANGELOG.md
index ceca741edd67be1a05830e3aa1e4592bfe02332f..5498df085c1e4e1c3fd8b0104d502fd7c5efc261 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,9 +1,26 @@
 # CHANGELOG:
+## 21 aout 2019
+
+**Ajouts:**
+- change nickname
+- kick from group
+- !! new templates !!
+- reinviter des gens kickés
+
+**fixes:**
+- all templates works now
+
+
+---
+
 ## 20 aout 2019
 **Ajout:**
-- shitpostbot5000 latest post every 30'
+- shitpostbot5000 latest facebook post every 30' if activated
 - trigger coucou coucou -> coucoucou
 - can send a random image from a insta hashtag page 
+- change title of a thread
+
+---
 
 ## 19 aout 2019
 **Ajout:**
@@ -15,6 +32,7 @@
 
 ## 17 aout 2019
 - Script useless/quizz.py complet
+- trigger Ah, mdr, lol, xptdr, tu ma tué
 
 ---
 
diff --git a/bot.py b/bot.py
index 9287ddc3e336338bf7613ae01ec459ced81c476c..9cfac35076946d893dbd4db7adf1ad989f2fd82e 100755
--- a/bot.py
+++ b/bot.py
@@ -12,11 +12,13 @@ from googletrans import Translator
 import threading
 translator = Translator()
 
+
 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']
     quizzes = {}
     shitpostbot = {}
+    kicked = {}
 
     def onMessage(self, author_id, message_object, thread_id, thread_type, **kwargs):
         self.markAsDelivered(thread_id, message_object.uid)
@@ -53,13 +55,15 @@ class Bot(Client):
                 '!philo \n' + \
                 '!pipo\n' + \
                 '!rename <personne> ; <pseudo> \n' + \
+                '!remove <personne> ; <raison(facultatif)> \n' + \
+                '!reinvite <personne(facultatif)>\n' + \
                 '!kohlanta <nom>\n' + \
                 '!rateau \n' + \
                 '!maps <nom_du_lieu> <destination(facultatif)> ... not yet fully fonctionnal\n' + \
                 '!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)>] ... ne pas utiliser PLEASE\n' + \
+                '!shitpostbot5000 [status|on|off|random <keyword(facultatif)>|timer] ... ne pas utiliser PLEASE\n' + \
                 '!title <newtitle>\n'\
                 '!about -> vas-y test-moi !\n'
             return help_text
@@ -86,12 +90,55 @@ class Bot(Client):
             client.changeThreadTitle(texte, thread_id=thread_id, thread_type=thread_type)
         # renomer qqn
         elif '!rename' in texte:
-            texte = texte.replace('!rename ', '').split(';')
-            for user in self.fetchAllUsersFromThreads([thread_id]):
+            texte = texte.replace('!rename ', '').split(' ; ')
+            for user in self.fetchAllUsersFromThreads([fetchThreadInfo(thread_id)[thread_id]]):
                 if user.name == texte[0]:
                     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
+        elif '!remove ' in texte and thread_type == ThreadType.GROUP:
+            texte = texte.replace('!remove ', '').split(' ; ')
+            user_to_remove = None
+            for user in self.fetchAllUsersFromThreads([fetchThreadInfo(thread_id)[thread_id]]):
+                if user.name == texte[0]:
+                    user_to_remove = user
+                if user.uid == author_id:
+                    author_name = user.name
+            if user_to_remove is not None:
+                log.info("{} will be removed from {} by {}".format(user_to_remove.uid, thread_id, author_id))
+                self.removeUserFromGroup(user_to_remove.uid, thread_id=thread_id)
+                if thread_id in Memes.kicked:
+                    Memes.kicked[thread_id].append(user_to_remove)
+                else:
+                    Memes.kicked[thread_id] = [user_to_remove]
+                return '{} a été kick du groupe par {} {}'.format(texte[0], author_name, 'pour la raison : {}'.format(texte[1]) if len(texte) == 2 else '')
+            else:
+                return random.choice(['T\'es sur de ton coup là ?', 'chais pas qui c\'est...'])
+
+        # réinviter le dernier mec kické du group
+        elif texte == '!reinvite':
+            if 'thread_id' in Memes.kicked:
+                self.addUsersToGroup(Memes.kicked[thread_id][-1].uid, thread_id=thread_id)
+        elif '!reinvite ' in texte:
+            if 'thread_id' in Memes.kicked:
+                finded = False
+                for user in Memes.kicked[thread_id]:
+                    if user.name == texte.replace('!reinvite ', ''):
+                        finded = True
+                        self.addUsersToGroup(user.uid, thread_id=thread_id)
+                        indice = Memes.kicked[thread_id].index(user)
+                if finded:
+                    # faut supprimer l'utilisateur réinvité de la liste des gens kickés
+                    del Memes.kicked[thread_id][indice]
+                    if len(Memes.kicked[thread_id]) == 0:
+                        # on supprime le groupe de la liste des groupes où des gens ont étés kickés
+                        del Memes.kicked[thread_id]
+
+                else:
+                    return 'Mec je l\'ai pas encore kick, mais tu peux reinviter ces gens là :\n' + "\n".join([user.name for user in Memes.kicked[thread_id]])
+            else:
+                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
         elif texte == '!shitpostbot5000 on':
@@ -114,7 +161,7 @@ class Bot(Client):
                 self.sendLocalImage(useless.Shitpostbot5000.random(texte), thread_id=thread_id, thread_type=thread_type)
 
         # pour rigoler
-        elif '!memes templates' in texte:
+        elif any(words in texte for words in ['!memes templates', '!memes help', '!help memes']):
             return useless.Memes.get_templates()
         elif '!memes ' in texte:
             texte = texte.replace('!memes ', '').split(' ; ')
@@ -239,4 +286,6 @@ if __name__ == '__main__':
     # username = str(input("Username: "))
     # client = Bot(username, getpass())
     client = Bot(USERNAME, PASSWORD)
+    Bot.shitpostbot['1627890897259691'] = [useless.Shitpostbot5000(), ThreadType.GROUP]
+    Bot.shitpostbot['1627890897259691'].set_on()
     client.listen()
diff --git a/images/memes_images/American-Chopper-Argument.jpg b/images/memes_images/American-Chopper-Argument.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2d10cea5b8685182e22be6326aa309f7200df6b4
Binary files /dev/null and b/images/memes_images/American-Chopper-Argument.jpg differ
diff --git a/images/memes_images/batman.jpg b/images/memes_images/batman.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..de08150dea8e4b7130b8bf5c05c95bf800b46d5d
Binary files /dev/null and b/images/memes_images/batman.jpg differ
diff --git a/images/memes_images/disastergirl.jpg b/images/memes_images/disastergirl.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6c101be04b37a2aa7beb7bd4dcd00dda1ea6b690
Binary files /dev/null and b/images/memes_images/disastergirl.jpg differ
diff --git a/images/memes_images/doubt.jpg b/images/memes_images/doubt.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..fd7b79feefe005772091a43ed7f3795ce68957d3
Binary files /dev/null and b/images/memes_images/doubt.jpg differ
diff --git a/images/memes_images/everywhere.jpg b/images/memes_images/everywhere.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..acb470b35865bb2f715e04bc2da9707f0a53a6f6
Binary files /dev/null and b/images/memes_images/everywhere.jpg differ
diff --git a/images/memes_images/evil.jpg b/images/memes_images/evil.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..428ef72911cf6d2bd55e732c661d947ca2560660
Binary files /dev/null and b/images/memes_images/evil.jpg differ
diff --git a/images/memes_images/exit.jpg b/images/memes_images/exit.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6c5d7a8d8691f24d1d4d04705911e89907dee424
Binary files /dev/null and b/images/memes_images/exit.jpg differ
diff --git a/images/memes_images/hidethepain.jpg b/images/memes_images/hidethepain.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9e6752b267cb7d830a3d30271c23550b058bdc58
Binary files /dev/null and b/images/memes_images/hidethepain.jpg differ
diff --git a/images/memes_images/images/euh.jpg b/images/memes_images/images/euh.jpg
deleted file mode 100644
index 4f873426c9f8142d106a8c7f05e8c3fdeb8f3375..0000000000000000000000000000000000000000
Binary files a/images/memes_images/images/euh.jpg and /dev/null differ
diff --git a/images/memes_images/mockingspongebob.jpg b/images/memes_images/mockingspongebob.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2cdc4671729dda5091c1c984799509d398d48e3b
Binary files /dev/null and b/images/memes_images/mockingspongebob.jpg differ
diff --git a/images/memes_images/neverland.jpg b/images/memes_images/neverland.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5febfb40c86a815dae2de6fc81ef48ae10c7d0cb
Binary files /dev/null and b/images/memes_images/neverland.jpg differ
diff --git a/images/memes_images/on_the_side/badsurprise.jpg b/images/memes_images/on_the_side/badsurprise.jpg
deleted file mode 100644
index 21d5e9a910b6c797765762c826b75637e8ddef2b..0000000000000000000000000000000000000000
Binary files a/images/memes_images/on_the_side/badsurprise.jpg and /dev/null differ
diff --git a/images/memes_images/on_the_side/goodchoice.jpg b/images/memes_images/on_the_side/goodchoice.jpg
deleted file mode 100644
index a7217d8b72bd84ea9a779276337d465f0861103e..0000000000000000000000000000000000000000
Binary files a/images/memes_images/on_the_side/goodchoice.jpg and /dev/null differ
diff --git a/images/memes_images/on_the_side/nanithfuck.jpg b/images/memes_images/on_the_side/nanithfuck.jpg
deleted file mode 100644
index 39cf29c77cc1ce9da99cc5ac78bcd287a0777f4b..0000000000000000000000000000000000000000
Binary files a/images/memes_images/on_the_side/nanithfuck.jpg and /dev/null differ
diff --git a/images/memes_images/skepticalkid.jpg b/images/memes_images/skepticalkid.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5c0fdf265f38ea44cdf7fdc6195aa46a9491bc48
Binary files /dev/null and b/images/memes_images/skepticalkid.jpg differ
diff --git a/images/memes_images/specials/avengers.jpg b/images/memes_images/specials/avengers.jpg
deleted file mode 100644
index c667c8faf2464a0a7efd302c43bb802889df58ea..0000000000000000000000000000000000000000
Binary files a/images/memes_images/specials/avengers.jpg and /dev/null differ
diff --git a/images/memes_images/specials/boyfriend.jpg b/images/memes_images/specials/boyfriend.jpg
deleted file mode 100644
index 8c125b2e41655219a79fdcfc2afe73b436ed8472..0000000000000000000000000000000000000000
Binary files a/images/memes_images/specials/boyfriend.jpg and /dev/null differ
diff --git a/images/memes_images/specials/godblessings.jpg b/images/memes_images/specials/godblessings.jpg
deleted file mode 100644
index bc24ee58183324a3d873498456f8ae046020adfa..0000000000000000000000000000000000000000
Binary files a/images/memes_images/specials/godblessings.jpg and /dev/null differ
diff --git a/images/memes_images/specials/homer.jpg b/images/memes_images/specials/homer.jpg
deleted file mode 100644
index 9ebf0269168009b10051b8de10c0b2b9456d2c19..0000000000000000000000000000000000000000
Binary files a/images/memes_images/specials/homer.jpg and /dev/null differ
diff --git a/images/memes_images/specials/thanos.jpg b/images/memes_images/specials/thanos.jpg
deleted file mode 100644
index 260d5c96fa615f132f3534dee276e1075495d2eb..0000000000000000000000000000000000000000
Binary files a/images/memes_images/specials/thanos.jpg and /dev/null differ
diff --git a/images/memes_images/specials/trash.jpg b/images/memes_images/specials/trash.jpg
deleted file mode 100644
index e548c9bc27db40a7c1e9b6e0a8c67d2edd8ac17e..0000000000000000000000000000000000000000
Binary files a/images/memes_images/specials/trash.jpg and /dev/null differ
diff --git a/images/memes_images/specials/whatisthis.png b/images/memes_images/specials/whatisthis.png
deleted file mode 100644
index b22a10a8ab6cd0d69e95fe94335feec99e27be96..0000000000000000000000000000000000000000
Binary files a/images/memes_images/specials/whatisthis.png and /dev/null differ
diff --git a/images/memes_images/thisisnotfine.jpg b/images/memes_images/thisisnotfine.jpg
index 586580763aa2cb864f5e390ead1a2e4f489d7799..f9d7bb5f81655b76a12d30bfaa88c75f6346ed50 100644
Binary files a/images/memes_images/thisisnotfine.jpg and b/images/memes_images/thisisnotfine.jpg differ
diff --git a/images/memes_images/trumpsigning.jpg b/images/memes_images/trumpsigning.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..27dff4d4118b686028623b364cfb840668165296
Binary files /dev/null and b/images/memes_images/trumpsigning.jpg differ
diff --git a/images/memes_images/twobuttons.jpg b/images/memes_images/twobuttons.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..7c7461161577df4bb40949f6f96f1bbdf1946cac
Binary files /dev/null and b/images/memes_images/twobuttons.jpg differ
diff --git a/images/memes_images/waitingskeleton.jpg b/images/memes_images/waitingskeleton.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..883c9830ad305d47fe6080c7ebeb92eb31db644d
Binary files /dev/null and b/images/memes_images/waitingskeleton.jpg differ
diff --git a/images/memes_images/whatisthis.jpg b/images/memes_images/whatisthis.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3e170ddb25bb6e119156908d73de710ee33bc192
Binary files /dev/null and b/images/memes_images/whatisthis.jpg differ
diff --git a/images/memes_images/whatisthis.png b/images/memes_images/whatisthis.png
deleted file mode 100644
index b22a10a8ab6cd0d69e95fe94335feec99e27be96..0000000000000000000000000000000000000000
Binary files a/images/memes_images/whatisthis.png and /dev/null differ
diff --git a/sample_out.jpg b/sample_out.jpg
index aaaae7e7a395c916007cc59caeb0be64d5b746f9..bc113022a7de7f856dbe35e2d5f1ffb63ea8368b 100644
Binary files a/sample_out.jpg and b/sample_out.jpg differ
diff --git a/useless/memes.py b/useless/memes.py
index c0f5fd7e22409f8745cf224fbc843a119b531d41..9793ff5bbf7ffdd98b6ca4d5a2ee08b621370b2f 100755
--- a/useless/memes.py
+++ b/useless/memes.py
@@ -13,7 +13,7 @@ import textwrap3
 class Memes(object):
     images = {
         "10guy": "10guy.jpg",
-        "euh": "images/euh.jpg",
+        "euh": "euh.jpg",
         "gangbang": "gangbang.jpg",
         "killyou": "killyou.jpg",
         "maths": "maths.jpg",
@@ -26,18 +26,32 @@ class Memes(object):
         "suicide": "suicide.jpg",
         "surprised": "suprised.jpg",
         "goodchoice": "goodchoice.jpg",
-        "nanithefuck": "nanithefuck.jpg",
-        "badsurprise": "badsurprise.jpg",
+        "nani-the-fuck": "nanithefuck.jpg",
+        "bad-surprise": "badsurprise.jpg",
         "boyfriend": "boyfriend.jpg",
-        "thisisfine": "thisisfine.jpg",
-        "thisisnotfine": "thisisnotfine.jpg",
+        "this-is-fine": "thisisfine.jpg",
+        "this-is-not-fine": "thisisnotfine.jpg",
         "depressing": "depressing.jpg",
         "avengers": "avengers.jpg",
         "godblessing": "godblessings.jpg",
         "homer": "homer.jpg",
         "thanos": "thanos.jpg",
         "trash": "trash.jpg",
-        "whatisthis": "whatisthis.png"
+        "is-this-a-pigeon": "whatisthis.jpg",
+        "batman-slap-robin": "batman.jpg",
+        "exit": 'exit.jpg',
+        "mocking-spongebob": 'mockingspongebob.jpg',
+        "two-buttons": 'twobuttons.jpg',
+        "waiting-skeleton": 'waitingskeleton.jpg',
+        "everywhere": 'everywhere.jpg',
+        'hide-the-pain': 'hidethepain.jpg',
+        "doubt": 'doubt.jpg',
+        "trump-signing": 'trumpsigning.jpg',
+        "disaster-girl": "disastergirl.jpg",
+        "finding-neverland": "neverland.jpg",
+        "skeptical-kid": "skepticalkid.jpg",
+        'american-chopper': "American-Chopper-Argument.jpg",
+        "evil-me": 'evil.jpg'
     }
 
     def __init__(self, image, text1, text2='', rep='images/memes_images/', out='sample_out.jpg'):
@@ -45,8 +59,8 @@ class Memes(object):
             urllib.request.urlretrieve(image, "sample_in.jpg")
             self.fichier = "sample_in.jpg"
         else:
-            assert image in Memes.images, "Can\'t open image..."
-            self.fichier = rep + Memes.images[image]
+            assert image.strip() in Memes.images, "Can\'t open image..."
+            self.fichier = rep + Memes.images[image.strip()]
         self.text1 = text1
         self.text2 = text2
         self.out = out
@@ -105,10 +119,14 @@ class Memes(object):
 
     @classmethod
     def get_templates(self):
-        return 'Tiens voilà la liste de mes images préenregistrées :\n' + "\n".join(Memes.images.keys())
+        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())
 
 
 if __name__ == '__main__':
     print(Memes.get_templates())
-    meme1 = Memes('smart', 'test1 lol !', 'test2 mdr ?')
-    file = meme1.process()
+    for image in Memes.images:  # testing every image
+        try:
+            meme1 = Memes(image, 'test1 lol !', 'test2 mdr ?')
+            file = meme1.process()
+        except:
+            print('erreur sur ' + image)