commit 168a8352f875faf812368d968acfb638b00b6c24 Author: andrewkydev1 Date: Mon May 24 10:17:42 2021 +0300 основа diff --git a/README.md b/README.md new file mode 100644 index 0000000..a8ba051 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# hater diff --git a/bot_group.py b/bot_group.py new file mode 100644 index 0000000..5cbdf50 --- /dev/null +++ b/bot_group.py @@ -0,0 +1,192 @@ +import time +import vk_api +import random +import config as c +from threading import Thread +from modules import sqlite_methods as m +from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType + +vk = vk_api.VkApi(token=c.g_token) +vk._auth_token() +vk.get_api() +longpoll = VkBotLongPoll(vk, c.group_id) + + +def get_variants(path): + with open(path, "r", encoding="utf-8") as f: + return f.readlines() + + +def send_msg(peer_id: int, message: str, attachment: str = ""): + return vk.method("messages.send", {**locals(), "random_id": 0}) + + +message_user_ids = [] +message_users = m.get_all_message_users() +for user in message_users: + message_user_ids.append(user[0]) + +photo_user_ids = [] +photo_users = m.get_all_photo_users() +for user in photo_users: + photo_user_ids.append(user[0]) + +settings_result = [] +settings = m.get_settings(2) +for value in settings: + settings_result.append(value) + +MESSAGE_VARIANTS = get_variants("variants/message_variants.txt") +random.shuffle(MESSAGE_VARIANTS) +PHOTO_VARIANTS = get_variants("variants/photo_variants.txt") +random.shuffle(PHOTO_VARIANTS) + + +def hate(): + message_index = 0 + photo_index = 0 + while True: + try: + for event in longpoll.listen(): + if event.type == VkBotEventType.MESSAGE_NEW: + + if event.obj.from_id in message_user_ids: + if message_index < len(MESSAGE_VARIANTS): + time.sleep(settings_result[1]) + send_msg(event.obj.peer_id, f'{MESSAGE_VARIANTS[message_index]}') + message_index += 1 + else: + message_index = 0 + random.shuffle(MESSAGE_VARIANTS) + time.sleep(settings_result[1]) + send_msg(event.obj.peer_id, f'{MESSAGE_VARIANTS[message_index]}') + message_index += 1 + + if event.obj.from_id in photo_user_ids: + if photo_index < len(PHOTO_VARIANTS): + time.sleep(settings_result[2]) + send_msg(event.obj.peer_id, '', f'{PHOTO_VARIANTS[photo_index]}') + photo_index += 1 + else: + photo_index = 0 + random.shuffle(PHOTO_VARIANTS) + time.sleep(settings_result[2]) + send_msg(event.obj.peer_id, '', f'{PHOTO_VARIANTS[photo_index]}') + photo_index += 1 + except Exception as e: + print(repr(e)) + + +def commands(): + while True: + try: + for event in longpoll.listen(): + if event.type == VkBotEventType.MESSAGE_NEW: + + split_text = event.object.text.split(' ') + + if split_text[0] in c.hate: + if len(split_text) == 2 and split_text[1] in c.hate_message_prefix: + if event.obj.from_id in c.g_admins: + if 'reply_message' in event.object: + user = event.obj.reply_message['from_id'] + if user != -c.group_id: + if not m.is_message_user_hatelisted(user): + message_user_ids.append(user) + m.insert_message_hatelist(user) + send_msg(event.obj.peer_id, '✅ Пользователь добавлен в текстовый хейт лист') + else: + send_msg(event.obj.peer_id, '❎ Пользователь уже находится в текстовом хейт листе') + else: + send_msg(event.obj.peer_id, '❎ Невозможно добавить бота в хейт лист') + else: + send_msg(event.obj.peer_id, '❎ Пользователь не указан') + else: + choice = random.choice(c.ERRORS) + send_msg(event.obj.peer_id, f'{choice}') + + elif len(split_text) == 2 and split_text[1] in c.hate_photo_prefix: + if event.obj.from_id in c.g_admins: + if 'reply_message' in event.object: + user = event.obj.reply_message['from_id'] + if user != -c.group_id: + if not m.is_photo_user_hatelisted(user): + photo_user_ids.append(user) + m.insert_photo_hatelist(user) + send_msg(event.obj.peer_id, '✅ Пользователь добавлен в фото хейт лист') + else: + send_msg(event.obj.peer_id, '❎ Пользователь уже находится в фото хейт листе') + else: + send_msg(event.obj.peer_id, '❎ Невозможно добавить бота в хейт лист') + else: + send_msg(event.obj.peer_id, '❎ Пользователь не указан') + else: + choice = random.choice(c.ERRORS) + send_msg(event.obj.peer_id, f'{choice}') + else: + send_msg(event.obj.peer_id, '❎ Неверный формат команды') + + if split_text[0] in c.unhate: + if len(split_text) == 2 and split_text[1] in c.hate_message_prefix: + if event.obj.from_id in c.g_admins: + if 'reply_message' in event.object: + user = event.obj.reply_message['from_id'] + if m.is_message_user_hatelisted(user): + message_user_ids.remove(user) + m.delete_message_hatelist(user) + send_msg(event.obj.peer_id, '✅ Пользователь удален из текстового хейт листа') + else: + send_msg(event.obj.peer_id, '❎ Пользователь отсутствует в текстовом хейт листе') + else: + send_msg(event.obj.peer_id, '❎ Пользователь не указан') + else: + choice = random.choice(c.ERRORS) + send_msg(event.obj.peer_id, f'{choice}') + + elif len(split_text) == 2 and split_text[1] in c.hate_photo_prefix: + if event.obj.from_id in c.g_admins: + if 'reply_message' in event.object: + user = event.obj.reply_message['from_id'] + if m.is_photo_user_hatelisted(user): + photo_user_ids.remove(user) + m.delete_photo_hatelist(user) + send_msg(event.obj.peer_id, '✅ Пользователь удален из фото хейт листа') + else: + send_msg(event.obj.peer_id, '❎ Пользователь отсутствует в фото хейт листе') + else: + send_msg(event.obj.peer_id, '❎ Пользователь не указан') + else: + choice = random.choice(c.ERRORS) + send_msg(event.obj.peer_id, f'{choice}') + else: + send_msg(event.obj.peer_id, '❎ Неверный формат команды') + + if split_text[0] in c.cooldown: + if len(split_text) == 3 and split_text[1] in c.hate_message_prefix and split_text[2].isnumeric(): + if event.obj.from_id in c.g_admins: + settings_result.pop(1) + settings_result.insert(1, int(split_text[2])) + m.set_message_cooldown(int(split_text[2]), 2) + send_msg(event.obj.peer_id, f'✅ Задержка текста изменена на {split_text[2]} секунд') + else: + choice = random.choice(c.ERRORS) + send_msg(event.obj.peer_id, f'{choice}') + + elif len(split_text) == 3 and split_text[1] in c.hate_photo_prefix and split_text[2].isnumeric(): + if event.obj.from_id in c.g_admins: + settings_result.pop(2) + settings_result.insert(2, int(split_text[2])) + m.set_photo_cooldown(int(split_text[2]), 2) + send_msg(event.obj.peer_id, f'✅ Задержка фото изменена на {split_text[2]} секунд') + else: + choice = random.choice(c.ERRORS) + send_msg(event.obj.peer_id, f'{choice}') + else: + send_msg(event.obj.peer_id, '❎ Неверный формат команды') + except Exception as e: + print(repr(e)) + + +if __name__ == '__main__': + Thread(target=hate, args=[]).start() + Thread(target=commands, args=[]).start() diff --git a/bot_user.py b/bot_user.py new file mode 100644 index 0000000..4207ef9 --- /dev/null +++ b/bot_user.py @@ -0,0 +1,209 @@ +import time +import vk_api +import random +import config as c +from modules import sqlite_methods as m +from threading import Thread +from vk_api.longpoll import VkLongPoll, VkEventType + +vk_session = vk_api.VkApi(token=c.u_token) +longpoll = VkLongPoll(vk_session) +vk = vk_session.get_api() + + +def typing(peer_id: int): + return vk.messages.setActivity(**locals(), type='typing') + + +def get_variants(path): + with open(path, "r", encoding="utf-8") as f: + return f.readlines() + + +def send_msg_reply(reply_to: int, peer_id: int, message: str, attachment: str = ""): + return vk.messages.send(**locals(), random_id=0) + + +def send_msg(peer_id: int, message: str, attachment: str = ""): + return vk.messages.send(**locals(), random_id=0) + + +message_user_ids = [] +message_users = m.get_all_message_users() +for user in message_users: + message_user_ids.append(user[0]) + +photo_user_ids = [] +photo_users = m.get_all_photo_users() +for user in photo_users: + photo_user_ids.append(user[0]) + +settings_result = [] +settings = m.get_settings(1) +for value in settings: + settings_result.append(value) + +MESSAGE_VARIANTS = get_variants("variants/message_variants.txt") +random.shuffle(MESSAGE_VARIANTS) +PHOTO_VARIANTS = get_variants("variants/photo_variants.txt") +random.shuffle(PHOTO_VARIANTS) + + +def hate(): + message_index = 0 + photo_index = 0 + while True: + try: + for event in longpoll.listen(): + if event.type == VkEventType.MESSAGE_NEW: + + if event.user_id in message_user_ids: + if not event.from_me: + if c.TYPING == 1: + typing(event.peer_id) + if message_index < len(MESSAGE_VARIANTS): + time.sleep(settings_result[1]) + send_msg_reply(event.message_id, event.peer_id, f'{MESSAGE_VARIANTS[message_index]}') + message_index += 1 + else: + message_index = 0 + random.shuffle(MESSAGE_VARIANTS) + time.sleep(settings_result[1]) + send_msg_reply(event.message_id, event.peer_id, f'{MESSAGE_VARIANTS[message_index]}') + message_index += 1 + + if event.user_id in photo_user_ids: + if not event.from_me: + if photo_index < len(PHOTO_VARIANTS): + time.sleep(settings_result[2]) + send_msg_reply(event.message_id, event.peer_id, '', f'{PHOTO_VARIANTS[photo_index]}') + photo_index += 1 + else: + photo_index = 0 + random.shuffle(PHOTO_VARIANTS) + time.sleep(settings_result[2]) + send_msg_reply(event.message_id, event.peer_id, '', f'{PHOTO_VARIANTS[photo_index]}') + photo_index += 1 + + except Exception as e: + print(repr(e)) + + +def commands(): + while True: + try: + for event in longpoll.listen(): + if event.type == VkEventType.MESSAGE_NEW: + + text = event.text + split_text = event.text.split(' ') + + if split_text[0] in c.hate: + if len(split_text) == 2 and split_text[1] in c.hate_message_prefix: + if event.user_id in c.u_admins: + msg = vk.messages.getById(message_ids=event.message_id)['items'][0] + if 'reply_message' in msg: + user = msg['reply_message']['from_id'] + if user != c.bot_id: + if not m.is_message_user_hatelisted(user): + message_user_ids.append(user) + m.insert_message_hatelist(user) + send_msg(event.peer_id, '✅ Пользователь добавлен в текстовый хейт лист') + else: + send_msg(event.peer_id, '❎ Пользователь уже находится в текстовом хейт листе') + else: + send_msg(event.peer_id, '❎ Невозможно добавить бота в хейт лист') + else: + send_msg(event.peer_id, '❎ Пользователь не указан') + else: + choice = random.choice(c.ERRORS) + send_msg(event.peer_id, f'{choice}') + + elif len(split_text) == 2 and split_text[1] in c.hate_photo_prefix: + if event.user_id in c.u_admins: + msg = vk.messages.getById(message_ids=event.message_id)['items'][0] + if 'reply_message' in msg: + user = msg['reply_message']['from_id'] + if user != c.bot_id: + if not m.is_photo_user_hatelisted(user): + photo_user_ids.append(user) + m.insert_photo_hatelist(user) + send_msg(event.peer_id, '✅ Пользователь добавлен в фото хейт лист') + else: + send_msg(event.peer_id, '❎ Пользователь уже находится в фото хейт листе') + else: + send_msg(event.peer_id, '❎ Невозможно добавить бота в хейт лист') + else: + send_msg(event.peer_id, '❎ Пользователь не указан') + else: + choice = random.choice(c.ERRORS) + send_msg(event.peer_id, f'{choice}') + else: + send_msg(event.peer_id, '❎ Неверный формат команды') + + if split_text[0] in c.unhate: + if len(split_text) == 2 and split_text[1] in c.hate_message_prefix: + if event.user_id in c.u_admins: + msg = vk.messages.getById(message_ids=event.message_id)['items'][0] + if 'reply_message' in msg: + user = msg['reply_message']['from_id'] + if m.is_message_user_hatelisted(user): + message_user_ids.remove(user) + m.delete_message_hatelist(user) + send_msg(event.peer_id, '✅ Пользователь удален из текстового хейт листа') + else: + send_msg(event.peer_id, '❎ Пользователь отсутствует в текстовом хейт листе') + else: + send_msg(event.peer_id, '❎ Пользователь не указан') + else: + choice = random.choice(c.ERRORS) + send_msg(event.peer_id, f'{choice}') + + elif len(split_text) == 2 and split_text[1] in c.hate_photo_prefix: + if event.user_id in c.u_admins: + msg = vk.messages.getById(message_ids=event.message_id)['items'][0] + if 'reply_message' in msg: + user = msg['reply_message']['from_id'] + if m.is_photo_user_hatelisted(user): + photo_user_ids.remove(user) + m.delete_photo_hatelist(user) + send_msg(event.peer_id, '✅ Пользователь удален из фото хейт листа') + else: + send_msg(event.peer_id, '❎ Пользователь отсутствует в фото хейт листе') + else: + send_msg(event.peer_id, '❎ Пользователь не указан') + else: + choice = random.choice(c.ERRORS) + send_msg(event.peer_id, f'{choice}') + else: + send_msg(event.peer_id, '❎ Неверный формат команды') + + if split_text[0] in c.cooldown: + if len(split_text) == 3 and split_text[1] in c.hate_message_prefix and split_text[2].isnumeric(): + if event.user_id in c.u_admins: + settings_result.pop(1) + settings_result.insert(1, int(split_text[2])) + m.set_message_cooldown(int(split_text[2]), 1) + send_msg(event.peer_id, f'✅ Задержка текста изменена на {split_text[2]} секунд') + else: + choice = random.choice(c.ERRORS) + send_msg(event.peer_id, f'{choice}') + + elif len(split_text) == 3 and split_text[1] in c.hate_photo_prefix and split_text[2].isnumeric(): + if event.user_id in c.u_admins: + settings_result.pop(2) + settings_result.insert(2, int(split_text[2])) + m.set_photo_cooldown(int(split_text[2]), 1) + send_msg(event.peer_id, f'✅ Задержка фото изменена на {split_text[2]} секунд') + else: + choice = random.choice(c.ERRORS) + send_msg(event.peer_id, f'{choice}') + else: + send_msg(event.peer_id, '❎ Неверный формат команды') + except Exception as e: + print(repr(e)) + + +if __name__ == '__main__': + Thread(target=hate, args=[]).start() + Thread(target=commands, args=[]).start() diff --git a/config.py b/config.py new file mode 100644 index 0000000..1d08ab5 --- /dev/null +++ b/config.py @@ -0,0 +1,24 @@ +# для страницы +u_admins = [] +bot_id = +u_token = '' + +# для группы +g_admins = [] +group_id = +g_token = '' + +# комнады +hate = ['+хейт', '+hate'] +unhate = ['-хейт', '-hate'] +cooldown = ['!кд', '!cd'] + +# префиксы +hate_message_prefix = ['текст', 'text'] +hate_photo_prefix = ['фото', 'photo'] + +# варианты ошибок доступа +ERRORS = "Иди отсюда нахуй, безправный", "А залупой по голове не хочешь?", "Хуя че вздумал", "Это так не работает", "1к и я подумаю" + +# 1 - "набирает сообщение" включено, 0 - выключено +TYPING = 1 diff --git a/database/db.db b/database/db.db new file mode 100644 index 0000000..ea7f35e Binary files /dev/null and b/database/db.db differ diff --git a/modules/__init__.py b/modules/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/modules/__init__.py @@ -0,0 +1 @@ + diff --git a/modules/__pycache__/__init__.cpython-38.pyc b/modules/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..12f727c Binary files /dev/null and b/modules/__pycache__/__init__.cpython-38.pyc differ diff --git a/modules/__pycache__/sqlite_methods.cpython-38.pyc b/modules/__pycache__/sqlite_methods.cpython-38.pyc new file mode 100644 index 0000000..4eb558b Binary files /dev/null and b/modules/__pycache__/sqlite_methods.cpython-38.pyc differ diff --git a/modules/sqlite_methods.py b/modules/sqlite_methods.py new file mode 100644 index 0000000..05d3968 --- /dev/null +++ b/modules/sqlite_methods.py @@ -0,0 +1,111 @@ +import sqlite3 + + +def is_message_user_hatelisted(user_id: int) -> bool: + with sqlite3.connect("database/db.db") as conn: + c = conn.cursor() + c.execute("SELECT count(user_id) FROM message_users WHERE user_id = %d" % user_id) + result = c.fetchone()[0] + c.close() + conn.close() + return result > 0 + + +def insert_message_hatelist(user_id: int): + with sqlite3.connect("database/db.db") as conn: + c = conn.cursor() + c.execute("INSERT INTO message_users(user_id) VALUES (%d)" % user_id) + conn.commit() + print(f"Пользователь {user_id} добавлен в хейтлист") + c.close() + conn.close() + + +def delete_message_hatelist(user_id: int): + with sqlite3.connect("database/db.db") as conn: + c = conn.cursor() + c.execute("DELETE FROM message_users WHERE user_id=%d" % user_id) + conn.commit() + print(f"Пользователь {user_id} удален из хейтлиста") + c.close() + conn.close() + + +def get_all_message_users(): + with sqlite3.connect("database/db.db") as conn: + c = conn.cursor() + c.execute("SELECT * FROM message_users") + result = c.fetchall() + c.close() + conn.close() + return result + + +def is_photo_user_hatelisted(user_id: int) -> bool: + with sqlite3.connect("database/db.db") as conn: + c = conn.cursor() + c.execute("SELECT count(user_id) FROM photo_users WHERE user_id = %d" % user_id) + result = c.fetchone()[0] + c.close() + conn.close() + return result > 0 + + +def insert_photo_hatelist(user_id: int): + with sqlite3.connect("database/db.db") as conn: + c = conn.cursor() + c.execute("INSERT INTO photo_users(user_id) VALUES (%d)" % user_id) + conn.commit() + print(f"Пользователь {user_id} добавлен в хейтлист") + c.close() + conn.close() + + +def delete_photo_hatelist(user_id: int): + with sqlite3.connect("database/db.db") as conn: + c = conn.cursor() + c.execute("DELETE FROM photo_users WHERE user_id=%d" % user_id) + conn.commit() + print(f"Пользователь {user_id} удален из хейтлиста") + c.close() + conn.close() + + +def get_all_photo_users(): + with sqlite3.connect("database/db.db") as conn: + c = conn.cursor() + c.execute("SELECT * FROM photo_users") + result = c.fetchall() + c.close() + conn.close() + return result + + +def set_message_cooldown(message_cooldown: int, type_id: int): + with sqlite3.connect("database/db.db") as conn: + c = conn.cursor() + c.execute("UPDATE settings SET message_cooldown = %d WHERE id = %d" % (message_cooldown, type_id)) + conn.commit() + print(f"Задержка текста изменена на {message_cooldown} секунд") + c.close() + conn.close() + + +def set_photo_cooldown(photo_cooldown: int, type_id: int): + with sqlite3.connect("database/db.db") as conn: + c = conn.cursor() + c.execute("UPDATE settings SET photo_cooldown = %d WHERE id = %d" % (photo_cooldown, type_id)) + conn.commit() + print(f"Задержка фото изменена на {photo_cooldown} секунд") + c.close() + conn.close() + + +def get_settings(type_id: int): + with sqlite3.connect("database/db.db") as conn: + c = conn.cursor() + c.execute("SELECT * FROM settings WHERE id = %d" % type_id) + result = c.fetchone() + c.close() + conn.close() + return result diff --git a/variants/message_variants.txt b/variants/message_variants.txt new file mode 100644 index 0000000..a764e08 --- /dev/null +++ b/variants/message_variants.txt @@ -0,0 +1,113 @@ +Я твой рот ебал +Пошел нахуй +Соси мой пайтонский член +Маме своей так скажи +Ты быканул или мне показалось +Не пиши мне, педик +Ясно гей +Пидорас ебаный +Хуй из пасти вытащи и потом говори +Я вертел тебя на своем цифрововм хуе +Ну и хули ты высрал +Тебе уебать или дать пососать +Нихуя ты умный +Хорошо сосешь +А почему рот в говне +Хуя ты сказанул +От такой речи мне аж захотелось въебать тебе +Ну и что ты мне сделаешь +Пососи ок +Помойся, воняешь +Нихуя ты заглотнул +Готовь очко +Сын шлюхи +Срал я на тебя, хуебланатый ебланат +Уткнись утырок +Вижу тебе понравилось как я тебя ебу +Лох ебаный +Иди мамке поплачься +В школе расскажешь +Маме привет +Шароеб ебаный +Я твой рот ебал +На, хуй соси и не скули, пока я твою мать не начал ебать +Че ты на мой хуй садишься как муха на говно +Сука, ты заебал мне яйца носом щекотать, соси аккуратно +Прикол, твоя мать шлюха обоссаная +Ты хули такой токсик, отчим в детстве выебал? +Оккупировал твое очко +Ты че там кони двинул, сын пидораса +Ты че заикаться то начал, хуеглот +Мамку твою ебал, что на это скажешь? +Ты на кого выебываешься, фиксик ебаный +Вхахахава, нихуя ты сказанул, чехол для хуя +От тебя говном воняет +От таких слов даже твой батя в гробу перевернулся +Ну как там с деньгами, еблан? +Нихуя тебе пердак разорвало +Чет твой батя не постарался, сливаешься как говно +Маму ебал +Все ясно, автор пидорас +Расширил твое очко до размеров созвездия Гидры +В палату быстро, долбоеб +А когда я тебя ебал ты другое орал +Как уебу тебе залупой по лбу +Че ты высрал, подзалупник +Поешь говна +10 iq ответ +Завали ебало, уёбище безмозглое, сука я бы тебя закопал +Хватит ныть как дешевая шлюха при виде огромного члена, твои выпуки читать все равно никто не будет +Молодец, а теперь отсоси так же, только с заглотом +Девочка слитая, иди поплачься бате в хуй +Ебало оффни, подзалупный творог +Сказал ты, сглотнув сперму своего бати +Единственное,что отличает тебя от остальных маленьких хуеглотов, это твое оригинальное имя. Передай своим родителям, что они достаточно творческие хуеплеты. +Я тебе тут ебучку в моче ополаскиваю, нравится? +Ебашу тебя хуем по лбу +Обкончал тебя и твою дохлую мамашу +Че ты мне сделаешь, сын портовой шлюхи? +гандон пашол нахуй гандон секс газонокосилка +Я найду тваю мамку, надену ей пакет на голову и изнасилую потом закопаю и раскопаю, и опять изнасилую потом её начнут жестко трах собаки, а твой папа будет это снимать +дебил у тя мать сгорела и я не про плату +Почему ты такая дура сегодня? Хотя я думаю это типично для тебя. +Я видел людей, как ты, но тогда я должен был заплатить за билет! +Я знаю, вы не так глупы, как выглядите. Такое невозможно! +Я знаю, что вы сделали сами себя. Это хорошо, что вы признаете свою вину! +Я знаю, вы родились глупым, но почему у вас рецидив? +Мне даже не нравятся те люди, которых вы пытаетесь копировать. +Я не могу вспомнить ваше имя и, пожалуйста, не помогайте мне в этом! +Я могу выгнать из вас обезьяну, но это будет очень дорого для вас стоить! +Я не знаю, что делает вас глупым, но это действительно работает. +Я не знаю, кто вы, но лучше бы вас не было, я уверен, все согласятся со мной. +Я не хочу, чтобы вы подставляли другую щеку, это просто уродливо. +Я не могу говорить с вами прямо сейчас, скажите мне, где вы будете находиться через лет 10? +Привет! Я человек! Что вы? +Я думаю, вы бы не хотели, чувствовать себя так, как вы выглядите! +Не пытайтесь ничего найти у себя в голове, она же пустая +Как ты сюда попал? Неужели кто-то оставил клетку открытой? +Почему ты здесь? Я думал, что зоопарк закрывается на ночь! +Да вы просто шаблон для построения идиота. +Он настолько короткий, что когда идет дождь, он всегда узнает об этом последним. +Вы являетесь живым доказательством того, что человек может жить без мозгов! +В книге «Кто есть кто» вас следует искать как Что Это? +Да вы просто чудо комик. Если смешно, это чудо! +Когда, наконец стемнеет, вы наверняка будете выглядеть лучше! +Он задумался – это что-то новенькое. +Вы человек земли, плохо, что не самая лучшая ее часть. +Любое сходство между вами и человеком является чисто случайным! +Вы всегда так глупы, или сегодня особый случай? +Как аутсайдер, что вы думаете о человеческой расе? +Я хотел бы вам ударить в зубы, но почему я должен улучшать ваш внешний вид? +По крайней мере, есть одна положительная вещь, в вашем теле. Оно не такое страшное, как ваше лицо! +Мозг еще не все. А в вашем случае он ничего! +Осторожнее, не позволяйте мозгу влезть вам в голову!08. Вы мне нравитесь. Говорят, у меня отвратительный вкус, но я вас люблю. +Ваши родители когда-нибудь попросили вас, убежать из дома? +Если бы я меня было такое лицо, как у вас. Я бы подал в суд на своих родителей! +Не огорчайтесь. У многих людей тоже нет таланта! +Не обижайтесь, но у вас, что, работа распространять невежество? +Продолжайте говорить, когда-нибудь вам все-таки удастся сказать что-нибудь умное! +Вы все еще любите природу, несмотря на то, что она сделала с вами? +Я так не думаю, может у вас растяжение мозга! +Стипендиаты как вы не растут на деревьях, они там колеблются. +Он имеет механический ум. Это плохо для него, он часто забывает поворачиваться к ветру спиной. +Его разум как стальная ловушка, которая всегда захлопывается при попытке найти ответ! diff --git a/variants/photo_variants.txt b/variants/photo_variants.txt new file mode 100644 index 0000000..079ed8f --- /dev/null +++ b/variants/photo_variants.txt @@ -0,0 +1,129 @@ +photo-198847189_457239149 +photo-198847189_457239148 +photo-198847189_457239147 +photo-198847189_457239146 +photo-198847189_457239145 +photo-198847189_457239144 +photo-198847189_457239143 +photo-198847189_457239142 +photo-198847189_457239141 +photo-198847189_457239140 +photo-198847189_457239139 +photo-198847189_457239138 +photo-198847189_457239137 +photo-198847189_457239136 +photo-198847189_457239135 +photo-198847189_457239134 +photo-198847189_457239133 +photo-198847189_457239132 +photo-198847189_457239131 +photo-198847189_457239130 +photo-198847189_457239129 +photo-198847189_457239128 +photo-198847189_457239127 +photo-198847189_457239126 +photo-198847189_457239125 +photo-198847189_457239124 +photo-198847189_457239123 +photo-198847189_457239122 +photo-198847189_457239121 +photo-198847189_457239120 +photo-198847189_457239119 +photo-198847189_457239118 +photo-198847189_457239117 +photo-198847189_457239116 +photo-198847189_457239115 +photo-198847189_457239114 +photo-198847189_457239113 +photo-198847189_457239112 +photo-198847189_457239111 +photo-198847189_457239110 +photo-198847189_457239109 +photo-198847189_457239108 +photo-198847189_457239107 +photo-198847189_457239106 +photo-198847189_457239105 +photo-198847189_457239104 +photo-198847189_457239103 +photo-198847189_457239102 +photo-198847189_457239101 +photo-198847189_457239100 +photo-198847189_457239099 +photo-198847189_457239098 +photo-198847189_457239097 +photo-198847189_457239096 +photo-198847189_457239095 +photo-198847189_457239094 +photo-198847189_457239093 +photo-198847189_457239092 +photo-198847189_457239091 +photo-198847189_457239090 +photo-198847189_457239089 +photo-198847189_457239088 +photo-198847189_457239087 +photo-198847189_457239086 +photo-198847189_457239085 +photo-198847189_457239084 +photo-198847189_457239083 +photo-198847189_457239081 +photo-198847189_457239080 +photo-198847189_457239079 +photo-198847189_457239078 +photo-198847189_457239077 +photo-198847189_457239076 +photo-198847189_457239075 +photo-198847189_457239074 +photo-198847189_457239073 +photo-198847189_457239072 +photo-198847189_457239071 +photo-198847189_457239070 +photo-198847189_457239069 +photo-198847189_457239068 +photo-198847189_457239067 +photo-198847189_457239066 +photo-198847189_457239065 +photo-198847189_457239064 +photo-198847189_457239063 +photo-198847189_457239062 +photo-198847189_457239061 +photo-198847189_457239060 +photo-198847189_457239059 +photo-198847189_457239058 +photo-198847189_457239057 +photo-198847189_457239056 +photo-198847189_457239055 +photo-198847189_457239054 +photo-198847189_457239053 +photo-198847189_457239052 +photo-198847189_457239051 +photo-198847189_457239050 +photo-198847189_457239049 +photo-198847189_457239048 +photo-198847189_457239047 +photo-198847189_457239046 +photo-198847189_457239045 +photo-198847189_457239044 +photo-198847189_457239043 +photo-198847189_457239042 +photo-198847189_457239041 +photo-198847189_457239040 +photo-198847189_457239039 +photo498281739_457246586 +photo498281739_457246585 +photo-198847189_457239038 +photo-198847189_457239037 +photo-198847189_457239036 +photo-198847189_457239035 +photo-198847189_457239034 +photo-198847189_457239033 +photo-198847189_457239031 +photo-198847189_457239030 +photo-198847189_457239027 +photo-198847189_457239025 +photo-198847189_457239024 +photo-198847189_457239023 +photo-198847189_457239021 +photo-198847189_457239019 +photo-198847189_457239018 +photo-198847189_457239017 +photo498281739_457246584