Files
limoka/GeekTG/FTG-Modules/rpmod.py
2025-07-10 21:02:34 +03:00

527 lines
27 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- 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("<code>Команда добавляется...</coode>")
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(
"<b>Были введены не только эмодзи(пробел тоже символ). </b>"
)
return
if len(lst) > 3:
await message.edit("<b>Было введено более 3 эмодзи. </b>")
return
if not emoji_rp or not emoji_rp.strip():
await message.edit(
"<b>Разделитель для эмодзи есть, а их нет? хм.</b>"
)
return
if len(lst) == 0:
await message.edit(
"<b>В 3 секции были введены не эмодзи. Если были введены эмодзи, но всё равно выходит ошибка, обратись к: </b>@trololo_1"
)
return
key_len = [len(x) for x in key_rp.split()]
if len(dict_rp) >= 70:
await message.edit("<b>Достигнут лимит рп команд.</b>")
else:
if not key_rp or not key_rp.strip():
await message.edit("<b>Вы не ввели название рп команды.</b>")
else:
if not value_rp or not value_rp.strip():
await message.edit(
"<b>Вы не ввели действие для рп команды.</b>"
)
else:
if int(len(key_len)) > 1:
await message.edit(
"<b>В качестве рп команды было введено больше одного слова.</b>"
)
else:
if key_rp == "all":
await message.edit(
"<b>Использовать '<code>all</code>' в качестве названия команды запрещено!</b>"
)
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"<b>Команда '<code>{key_rp}</code>' успешно добавлена с эмодзи '{emoji_rp}'!</b>"
)
else:
dict_rp_copy[key_rp] = value_rp
self.db.set("RPMod", "rpcomands", dict_rp_copy)
await message.edit(
f"<b>Команда '<code>{key_rp}</code>' успешно добавлена!</b>"
)
except:
await message.edit(
"<b>Вы не ввели разделитель /, либо вовсе ничего не ввели.</b>"
)
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("<b>Список рп команд очищен.</b>")
return
if not key_rp or not key_rp.strip():
await message.edit("<b>Вы не ввели команду.</b>")
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"<b>Команда '<code>{key_rp}</code>' успешно удалена!</b>"
)
except KeyError:
await message.edit("<b>Команда не найдена.</b>")
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("<b>RP Режим <code>выключен</code></b>")
else:
self.db.set("RPMod", "status", 1)
await message.edit("<b>RP Режим <code>включен</code></b>")
elif args.strip() == "toggle":
if rezjim == 1:
self.db.set("RPMod", "rprezjim", 2)
await message.edit(
"<b>RP Режим изменён на <code>отправку смс.</code></b>"
)
else:
self.db.set("RPMod", "rprezjim", 1)
await message.edit(
"<b>RP Режим изменён на <code>изменение смс.</code></b>"
)
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"У вас рп команд: <b>{l}</b> из <b>70</b>. "
if len(com) == 0:
await message.edit("<b>Увы, у вас нету рп команд. :(</b>")
return
for i in com:
if i in emojies.keys():
listComands += f"\n• <b><code>{i}</code> - {com[i]} |</b> {emojies[i]}"
else:
listComands += f"\n• <b><code>{i}</code> - {com[i]}</b>"
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"<b>Ник изменён на {me.first_name}</b>")
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"<b>Ник '{r}' содержит более трёх эмодзи.</b>")
else:
if len(lst) + len(nick) >= 45:
await message.edit(
"<b>Ник превышает лимит в 45 символов(возможно эмодзи имеют длину более 1 символа).</b>"
)
else:
self.db.set("RPMod", "rpnick", r)
await message.edit(f"<b>Ник изменён на {r}</b>")
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("<b>У вас нет рп команд.</b>")
elif len(emojies) == 0:
await message.edit(f"<code>.rpback / {comand} </code>")
else:
await message.edit(f"<code>.rpback / {comand} / {emojies}</code>")
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(
"<b>Синтаксис секции эмодзи не является корректным(словарём в питоне).</b>"
)
else:
if len(emj) == 0:
await message.edit("<b>Словарь эмодзи пуст.</b>")
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(
"<b>Пустое значение в словаре для эмодзи? Да ты гений.</b>"
)
return
if (
x.isalpha()
or x.isspace()
or x.isdigit()
or x in string.punctuation
):
await message.edit(
"<b>Были введены не только эмодзи в словаре для эмодзи(пробел тоже символ). </b>"
)
return
if len(lst) > 3:
await message.edit(
"<b>Было введено более 3 эмодзи в словаре для эмодзи. </b>"
)
return
for x in emj:
key_len = [len(l) for l in x.split()]
if int(len(key_len)) > 1:
await message.edit(
"<b>В качестве ключа было введено больше одного слова в словаре эмодзи.</b>"
)
return
if not x or not x.strip():
await message.edit(
"<b>Пустой ключ в словаре для эмодзи? Да ты умничка.</b>"
)
return
com = eval(comands)
if dict == type(com):
if len(com) == 0:
await message.edit("<b>Словарь команд пуст.</b>")
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(
"<b>В качестве ключа было введено больше одного слова в словаре команд.</b>"
)
return
if not x or not x.strip():
await message.edit(
"<b>Пустой ключ в словаре для команд? Мой хороший, так дела не делаются.</b>"
)
return
for x in com.values():
if not x or not x.strip():
await message.edit(
"<b>Пустое значение в словаре для команд? Не сегодня, мой золотой.</b>"
)
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(
"<b>Успешное обновлени словаря команд и эмодзи! Вы можете просмотреть их благодаря команде '<code>.rplist</code>'.</b>"
)
else:
comand_copy = comand.copy()
merge_com = {**comand_copy, **com}
self.db.set("RPMod", "rpcomands", merge_com)
await message.edit(
"<b>Успешное обновлени словаря команд! Вы можете просмотреть его благодаря команде '<code>.rplist</code>'.</b>"
)
else:
await message.edit(
"<b>Синтаксис секции команд не является корректным(словарём в питоне).</b>"
)
except:
await message.edit(
"<b>Что то не так с разделителями /.\nЛибо не корректный словарь.(либо вообще пусто)</b>"
)
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"<i>Чат <b><u>{name}</u></b>(<code>{a.id}</code>) удален из исключений.</i>"
)
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"<i>Чат <b><u>{name}</u></b>(<code>{a.id}</code>) добавлен в исключения.</i>"
)
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"<i>Чат <b><u>{name}</u></b>(<code>{args}</code>) удален из исключений.</i>"
)
else:
await message.edit("<b>Неверный ид.</b>")
elif args == "list":
ex_len = len(ex_copy)
if ex_len == 0:
await message.edit("<b>Список исключений пуст.</b>")
return
sms = f"<i> Чаты, которые есть в исключениях({ex_len}):</i>"
for i in ex_copy:
a = await message.client.get_entity(i)
try:
name = a.title
except:
name = a.first_name
sms += f"\n• <b><u>{name}</u></b>(<code>{i}</code>)"
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]]} | <a href=tg://user?id={me.id}>{nick}</a> {comand[detail[0]]} <a href=tg://user?id={user.id}>{user.first_name}</a>"
+ detail[1]
)
else:
await message.respond(
f"{emojies[detail[0]]} | <a href=tg://user?id={me.id}>{nick}</a> {comand[detail[0]]} <a href=tg://user?id={user.id}>{user.first_name}</a>"
+ detail[1]
)
else:
if rezjim == 1:
await message.edit(
f"{emojies[detail[0]]} | <a href=tg://user?id={me.id}>{nick}</a> {comand[detail[0]]} <a href=tg://user?id={user.id}>{user.first_name}</a>"
+ detail[1]
+ f"\n<b>С репликой: </b>{lines[1]}"
)
else:
await message.respond(
f"{emojies[detail[0]]} | <a href=tg://user?id={me.id}>{nick}</a> {comand[detail[0]]} <a href=tg://user?id={user.id}>{user.first_name}</a>"
+ detail[1]
+ f"\n<b>С репликой: </b>{lines[1]}"
)
else:
if len(lines) < 2:
if rezjim == 1:
await message.edit(
f"<a href=tg://user?id={me.id}>{nick}</a> {comand[detail[0]]} <a href=tg://user?id={user.id}>{user.first_name}</a>"
+ detail[1]
)
else:
await message.respond(
f"<a href=tg://user?id={me.id}>{nick}</a> {comand[detail[0]]} <a href=tg://user?id={user.id}>{user.first_name}</a>"
+ detail[1]
)
else:
if rezjim == 1:
await message.edit(
f"<a href=tg://user?id={me.id}>{nick}</a> {comand[detail[0]]} <a href=tg://user?id={user.id}>{user.first_name}</a>"
+ detail[1]
+ f"\n<b>С репликой: </b>{lines[1]}"
)
else:
await message.respond(
f"<a href=tg://user?id={me.id}>{nick}</a> {comand[detail[0]]} <a href=tg://user?id={user.id}>{user.first_name}</a>"
+ detail[1]
+ f"\n<b>С репликой: </b>{lines[1]}"
)
except:
pass