# -*- coding: utf-8 -*- # Module author: @trololo_1 import subprocess try: import emoji except: mod_inst = subprocess.Popen("pip install emoji", shell=True) mod_inst.wait() import emoji import string from .. import loader, utils @loader.tds class RPMod(loader.Module): """Модуль RPMod + дополнение после команды.+реплика.(указывать реплику на второй строке)""" strings = {"name": "RPMod"} async def client_ready(self, client, db): self.db = db if not self.db.get("RPMod", "exlist", False): exlist = [] self.db.set("RPMod", "exlist", exlist) if not self.db.get("RPMod", "status", False): self.db.get("RPMod", "status", 1) if not self.db.get("RPMod", "rprezjim", False): self.db.set("RPMod", "rprezjim", 1) if not self.db.get("RPMod", "rpnick", False): me = await client.get_me() self.db.set("RPMod", "rpnick", me.first_name) if not self.db.get("RPMod", "rpcomands", False): comands = { "чмок": "чмокнул", "кусь": "кусьнул", "пиц": "радостные звуки питсы", "поцеловать": "поцеловал", "ррр": "злые звуки питсы", "выебать": "выебал", "трахнуть": "трахнул", "выпороть": "выпорол", "шлепнуть": "шлепнул", "отлизать": "отлизал у", "прижать": "прижал", "погладить": "погладил", "да.": "пизда", "где.": "в пизде", "нет.": "пидора ответ", "бывает.": "ну это пиздец конечно на самом деле", "мрр.": "мурчание питсы", "ррррр.": "злая питса", "обнять": "обнял", } self.db.set("RPMod", "rpcomands", comands) if not self.db.get("RPMod", "rpemoji", False): emojiComands = {"лизь": "👅"} self.db.set("RPMod", "rpemoji", emojiComands) async def dobrpcmd(self, message): """Используй: .dobrp (команда) / (действие) / (эмодзи) чтобы добавить команду. Можно и без эмодзи(но и второго разделителя). Используй только одно слово в качестве команды.""" await message.edit("Команда добавляется...") args = utils.get_args_raw(message) dict_rp = self.db.get("RPMod", "rpcomands") dict_rp_copy = dict_rp.copy() try: key_rp = str(args.split("/")[0]).strip() value_rp = str(args.split("/", maxsplit=2)[1]).strip() lenght_args = [] for i in args.split("/"): lenght_args.append(i) count_emoji = 0 if len(lenght_args) >= 3: emoji_rp = str(args.split("/", maxsplit=2)[2]).strip() dict_emoji_rp = self.db.get("RPMod", "rpemoji") dict_emoji_rp_copy = dict_emoji_rp.copy() r = emoji_rp lst = [] count_emoji = 1 for x in r: if x in emoji.UNICODE_EMOJI["en"].keys(): lst.append(x) if ( x.isalpha() or x.isspace() or x.isdigit() or x in string.punctuation ): await message.edit( "Были введены не только эмодзи(пробел тоже символ). " ) return if len(lst) > 3: await message.edit("Было введено более 3 эмодзи. ") return if not emoji_rp or not emoji_rp.strip(): await message.edit( "Разделитель для эмодзи есть, а их нет? хм." ) return if len(lst) == 0: await message.edit( "В 3 секции были введены не эмодзи. Если были введены эмодзи, но всё равно выходит ошибка, обратись к: @trololo_1" ) return key_len = [len(x) for x in key_rp.split()] if len(dict_rp) >= 70: await message.edit("Достигнут лимит рп команд.") else: if not key_rp or not key_rp.strip(): await message.edit("Вы не ввели название рп команды.") else: if not value_rp or not value_rp.strip(): await message.edit( "Вы не ввели действие для рп команды." ) else: if int(len(key_len)) > 1: await message.edit( "В качестве рп команды было введено больше одного слова." ) else: if key_rp == "all": await message.edit( "Использовать 'all' в качестве названия команды запрещено!" ) else: if count_emoji == 1: dict_emoji_rp_copy[key_rp] = emoji_rp dict_rp_copy[key_rp] = value_rp self.db.set("RPMod", "rpcomands", dict_rp_copy) self.db.set("RPMod", "rpemoji", dict_emoji_rp_copy) await message.edit( f"Команда '{key_rp}' успешно добавлена с эмодзи '{emoji_rp}'!" ) else: dict_rp_copy[key_rp] = value_rp self.db.set("RPMod", "rpcomands", dict_rp_copy) await message.edit( f"Команда '{key_rp}' успешно добавлена!" ) except: await message.edit( "Вы не ввели разделитель /, либо вовсе ничего не ввели." ) async def delrpcmd(self, message): """Используй: .delrp (команда) чтобы удалить команду.\n Используй: .delrp all чтобы удалить все команды.""" await message.edit("Команда удаляется..") args = utils.get_args_raw(message) dict_rp = self.db.get("RPMod", "rpcomands") dict_emoji_rp = self.db.get("RPMod", "rpemoji") dict_emoji_rp_copy = dict_emoji_rp.copy() dict_rp_copy = dict_rp.copy() key_rp = str(args) count = 0 if key_rp == "all": dict_rp_copy.clear() dict_emoji_rp_copy.clear() self.db.set("RPMod", "rpcomands", dict_rp_copy) self.db.set("RPMod", "rpemoji", dict_emoji_rp_copy) await message.edit("Список рп команд очищен.") return if not key_rp or not key_rp.strip(): await message.edit("Вы не ввели команду.") else: try: for i in dict_emoji_rp_copy: if i == key_rp: count = 1 break if count == 1: dict_rp_copy.pop(key_rp) dict_emoji_rp_copy.pop(key_rp) self.db.set("RPMod", "rpcomands", dict_rp_copy) self.db.set("RPMod", "rpemoji", dict_emoji_rp_copy) else: dict_rp_copy.pop(key_rp) self.db.set("RPMod", "rpcomands", dict_rp_copy) await message.edit( f"Команда '{key_rp}' успешно удалена!" ) except KeyError: await message.edit("Команда не найдена.") async def rpmodcmd(self, message): """Используй: .rpmod чтобы включить/выключить RP режим.\nИспользуй: .rpmod toggle чтобы сменить режим на отправку или изменение смс.""" status = self.db.get("RPMod", "status") rezjim = self.db.get("RPMod", "rprezjim") args = utils.get_args_raw(message) if not args: if status == 1: self.db.set("RPMod", "status", 2) await message.edit("RP Режим выключен") else: self.db.set("RPMod", "status", 1) await message.edit("RP Режим включен") elif args.strip() == "toggle": if rezjim == 1: self.db.set("RPMod", "rprezjim", 2) await message.edit( "RP Режим изменён на отправку смс." ) else: self.db.set("RPMod", "rprezjim", 1) await message.edit( "RP Режим изменён на изменение смс." ) else: await message.edit("Что то не так.. ") async def rplistcmd(self, message): """Используй: .rplist чтобы посмотреть список рп команд.""" com = self.db.get("RPMod", "rpcomands") emojies = self.db.get("RPMod", "rpemoji") l = len(com) listComands = f"У вас рп команд: {l} из 70. " if len(com) == 0: await message.edit("Увы, у вас нету рп команд. :(") return for i in com: if i in emojies.keys(): listComands += f"\n• {i} - {com[i]} | {emojies[i]}" else: listComands += f"\n• {i} - {com[i]}" await message.edit(listComands) async def rpnickcmd(self, message): "Используй: .rpnick (ник) чтобы сменить свой ник. Если без аргументов, то вернётся ник из тг." r = utils.get_args_raw(message).strip() if not r: me = await message.client.get_me() self.db.set("RPMod", "rpnick", me.first_name) await message.edit(f"Ник изменён на {me.first_name}") return lst = [] nick = "" for x in r: if x in emoji.UNICODE_EMOJI["en"].keys(): lst.append(x) if x not in emoji.UNICODE_EMOJI["en"].keys(): nick += x if len(lst) > 3: await message.edit(f"Ник '{r}' содержит более трёх эмодзи.") else: if len(lst) + len(nick) >= 45: await message.edit( "Ник превышает лимит в 45 символов(возможно эмодзи имеют длину более 1 символа)." ) else: self.db.set("RPMod", "rpnick", r) await message.edit(f"Ник изменён на {r}") async def rpbackcmd(self, message): "Используй: .rpback чтобы выгрузить список своих рп команд.\nИспользуй .rpback / (список чьих то команд) / (список чьих то эмодзи) чтобы добавить себе список команд. можно без эмодзи, но первый разделитель обязателен." args = utils.get_args_raw(message).strip() comand = self.db.get("RPMod", "rpcomands") emojies = self.db.get("RPMod", "rpemoji") if not args: if len(comand) == 0: await message.edit("У вас нет рп команд.") elif len(emojies) == 0: await message.edit(f".rpback / {comand} ") else: await message.edit(f".rpback / {comand} / {emojies}") if args: try: comands = str(args.split("/")[1]).strip() lenght_args = [] for i in args.split("/"): lenght_args.append(i) count_emoji = 0 if len(lenght_args) >= 3: emoji_rp = str(args.split("/")[2]).strip() count_emoji = 1 emj = eval(emoji_rp) if not dict == type(emj): await message.edit( "Синтаксис секции эмодзи не является корректным(словарём в питоне)." ) else: if len(emj) == 0: await message.edit("Словарь эмодзи пуст.") return for x in emj.values(): lst = [] if x in emoji.UNICODE_EMOJI["en"].keys(): lst.append(x) if not x or not x.strip(): await message.edit( "Пустое значение в словаре для эмодзи? Да ты гений." ) return if ( x.isalpha() or x.isspace() or x.isdigit() or x in string.punctuation ): await message.edit( "Были введены не только эмодзи в словаре для эмодзи(пробел тоже символ). " ) return if len(lst) > 3: await message.edit( "Было введено более 3 эмодзи в словаре для эмодзи. " ) return for x in emj: key_len = [len(l) for l in x.split()] if int(len(key_len)) > 1: await message.edit( "В качестве ключа было введено больше одного слова в словаре эмодзи." ) return if not x or not x.strip(): await message.edit( "Пустой ключ в словаре для эмодзи? Да ты умничка." ) return com = eval(comands) if dict == type(com): if len(com) == 0: await message.edit("Словарь команд пуст.") return for x in com: key_len_cmd = [len(l) for l in x.split()] if int(len(key_len_cmd)) > 1: await message.edit( "В качестве ключа было введено больше одного слова в словаре команд." ) return if not x or not x.strip(): await message.edit( "Пустой ключ в словаре для команд? Мой хороший, так дела не делаются." ) return for x in com.values(): if not x or not x.strip(): await message.edit( "Пустое значение в словаре для команд? Не сегодня, мой золотой." ) return if count_emoji == 1: comand_copy = comand.copy() emojies_copy = emojies.copy() merge_emj = {**emojies_copy, **emj} merge_com = {**comand_copy, **com} self.db.set("RPMod", "rpcomands", merge_com) self.db.set("RPMod", "rpemoji", merge_emj) await message.edit( "Успешное обновлени словаря команд и эмодзи! Вы можете просмотреть их благодаря команде '.rplist'." ) else: comand_copy = comand.copy() merge_com = {**comand_copy, **com} self.db.set("RPMod", "rpcomands", merge_com) await message.edit( "Успешное обновлени словаря команд! Вы можете просмотреть его благодаря команде '.rplist'." ) else: await message.edit( "Синтаксис секции команд не является корректным(словарём в питоне)." ) except: await message.edit( "Что то не так с разделителями /.\nЛибо не корректный словарь.(либо вообще пусто)" ) async def rpblockcmd(self, message): """Используй: .rpblock чтобы добавить/удалить исключение(использовать в нужном чате).\nИспользуй: .rpblock list чтобы просмотреть чаты в исключениях.\nИспользуй .rpblock (ид) чтобы удалить чат из исключений.""" args = utils.get_args_raw(message) ex = self.db.get("RPMod", "exlist") ex_copy = ex.copy() if not args: a = await message.client.get_entity(message.to_id) if a.id in ex_copy: ex_copy.remove(a.id) self.db.set("RPMod", "exlist", ex_copy) try: name = a.title except: name = a.first_name await message.edit( f"Чат {name}({a.id}) удален из исключений." ) else: ex_copy.append(a.id) self.db.set("RPMod", "exlist", ex_copy) try: name = a.title except: name = a.first_name await message.edit( f"Чат {name}({a.id}) добавлен в исключения." ) elif args.isdigit(): args = args.strip() args = int(args) if args in ex_copy: a = await message.client.get_entity(args) ex_copy.remove(args) self.db.set("RPMod", "exlist", ex_copy) try: name = a.title except: name = a.first_name await message.edit( f"Чат {name}({args}) удален из исключений." ) else: await message.edit("Неверный ид.") elif args == "list": ex_len = len(ex_copy) if ex_len == 0: await message.edit("Список исключений пуст.") return sms = f" Чаты, которые есть в исключениях({ex_len}):" for i in ex_copy: a = await message.client.get_entity(i) try: name = a.title except: name = a.first_name sms += f"\n• {name}({i})" await message.edit(sms) else: await message.edit("Что то пошло не так..") async def watcher(self, message): try: status = self.db.get("RPMod", "status") comand = self.db.get("RPMod", "rpcomands") rezjim = self.db.get("RPMod", "rprezjim") emojies = self.db.get("RPMod", "rpemoji") nick = self.db.get("RPMod", "rpnick") ex = self.db.get("RPMod", "exlist") args = message.text.lower() chat_rp = await message.client.get_entity(message.to_id) lines = [] detail = [] round = 1 for line in args.splitlines(): lines.append(line) for i in lines[0].split(" ", maxsplit=1): if round == 1: detail.append(i) else: detail.append(" " + i) round += 1 if len(detail) < 2: detail.append(" ") reply = await message.get_reply_message() user = await message.client.get_entity(reply.sender_id) me = await message.client.get_me() if status == 1: if chat_rp.id not in ex: if message.sender_id == me.id: for i in comand: if detail[0] == i: if detail[0] in emojies.keys(): if len(lines) < 2: if rezjim == 1: await message.edit( f"{emojies[detail[0]]} | {nick} {comand[detail[0]]} {user.first_name}" + detail[1] ) else: await message.respond( f"{emojies[detail[0]]} | {nick} {comand[detail[0]]} {user.first_name}" + detail[1] ) else: if rezjim == 1: await message.edit( f"{emojies[detail[0]]} | {nick} {comand[detail[0]]} {user.first_name}" + detail[1] + f"\nС репликой: {lines[1]}" ) else: await message.respond( f"{emojies[detail[0]]} | {nick} {comand[detail[0]]} {user.first_name}" + detail[1] + f"\nС репликой: {lines[1]}" ) else: if len(lines) < 2: if rezjim == 1: await message.edit( f"{nick} {comand[detail[0]]} {user.first_name}" + detail[1] ) else: await message.respond( f"{nick} {comand[detail[0]]} {user.first_name}" + detail[1] ) else: if rezjim == 1: await message.edit( f"{nick} {comand[detail[0]]} {user.first_name}" + detail[1] + f"\nС репликой: {lines[1]}" ) else: await message.respond( f"{nick} {comand[detail[0]]} {user.first_name}" + detail[1] + f"\nС репликой: {lines[1]}" ) except: pass