mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-16 14:34:17 +02:00
Added and updated repositories 2025-07-11 08:27:20
This commit is contained in:
@@ -1,42 +1,42 @@
|
||||
# meta developer: @trololo_1
|
||||
|
||||
from .. import utils, loader
|
||||
from asyncio import sleep
|
||||
|
||||
class BFGMod(loader.Module):
|
||||
"""Send mes"""
|
||||
strigs = {'name': 'BFGMod'}
|
||||
async def client_ready(self, client, db):
|
||||
self.db = db
|
||||
|
||||
async def bbtoncmd(self, message):
|
||||
""" """
|
||||
await utils.answer(message, '<b>Запущено</b>')
|
||||
status = self.db.set('BFGMod', 'status1', True)
|
||||
while status:
|
||||
for i in range(15):
|
||||
if not self.db.get('BFGMod', 'status1'): return
|
||||
await message.respond('10')
|
||||
await sleep(2)
|
||||
status = self.db.get('BFGMod', 'status1')
|
||||
await message.respond('🚀Оценивать')
|
||||
|
||||
async def bbtoffcmd(self, message):
|
||||
""" """
|
||||
self.db.set('BFGMod', 'status1', False)
|
||||
await utils.answer(message, '<b>Остановлено</b>')
|
||||
|
||||
async def bfgoncmd(self, message):
|
||||
""" """
|
||||
await utils.answer(message, '<b>Запущено</b>')
|
||||
status = self.db.set('BFGMod', 'status2', True)
|
||||
while status:
|
||||
await message.respond('копать материю')
|
||||
await sleep(60*5)
|
||||
status = self.db.get('BFGMod', 'status2')
|
||||
if not status: return
|
||||
|
||||
async def bfgoffcmd(self, message):
|
||||
""" """
|
||||
self.db.set('BFGMod', 'status2', False)
|
||||
await utils.answer(message, '<b>Остановлено</b>')
|
||||
# meta developer: @trololo_1
|
||||
|
||||
from .. import utils, loader
|
||||
from asyncio import sleep
|
||||
|
||||
class BFGMod(loader.Module):
|
||||
"""Send mes"""
|
||||
strigs = {'name': 'BFGMod'}
|
||||
async def client_ready(self, client, db):
|
||||
self.db = db
|
||||
|
||||
async def bbtoncmd(self, message):
|
||||
""" """
|
||||
await utils.answer(message, '<b>Запущено</b>')
|
||||
status = self.db.set('BFGMod', 'status1', True)
|
||||
while status:
|
||||
for i in range(15):
|
||||
if not self.db.get('BFGMod', 'status1'): return
|
||||
await message.respond('10')
|
||||
await sleep(2)
|
||||
status = self.db.get('BFGMod', 'status1')
|
||||
await message.respond('🚀Оценивать')
|
||||
|
||||
async def bbtoffcmd(self, message):
|
||||
""" """
|
||||
self.db.set('BFGMod', 'status1', False)
|
||||
await utils.answer(message, '<b>Остановлено</b>')
|
||||
|
||||
async def bfgoncmd(self, message):
|
||||
""" """
|
||||
await utils.answer(message, '<b>Запущено</b>')
|
||||
status = self.db.set('BFGMod', 'status2', True)
|
||||
while status:
|
||||
await message.respond('копать материю')
|
||||
await sleep(60*5)
|
||||
status = self.db.get('BFGMod', 'status2')
|
||||
if not status: return
|
||||
|
||||
async def bfgoffcmd(self, message):
|
||||
""" """
|
||||
self.db.set('BFGMod', 'status2', False)
|
||||
await utils.answer(message, '<b>Остановлено</b>')
|
||||
|
||||
@@ -1,32 +1,32 @@
|
||||
# meta developer: @trololo_1
|
||||
|
||||
from .. import loader, utils
|
||||
|
||||
@loader.tds
|
||||
class LsSendMod(loader.Module):
|
||||
"""Отправка смс в лс по юзеру пользователя."""
|
||||
strings = {'name':'LsSend'}
|
||||
|
||||
async def sendcmd(self, message):
|
||||
""" .send {юзер} {текст или реплай}"""
|
||||
try:
|
||||
reply = await message.get_reply_message()
|
||||
text = utils.get_args_raw(message)
|
||||
|
||||
id = str(text.split(' ')[0])
|
||||
check = []
|
||||
for i in text.split(' '):
|
||||
check.append(i)
|
||||
|
||||
if len(check) <= 1:
|
||||
send = reply
|
||||
else:
|
||||
send = str(text.split(' ', maxsplit=1)[1])
|
||||
if send:
|
||||
await message.client.send_message(id, send)
|
||||
await message.edit('<b>Сообщение успешно отправлено!</b>')
|
||||
else:
|
||||
await message.edit('<b>Не было сделано реплая или нет текста.</b>')
|
||||
except:
|
||||
await message.edit('<b>Неверный юзер, юзера нет вообще, либо ещё какая то ошибка.</b>')
|
||||
|
||||
# meta developer: @trololo_1
|
||||
|
||||
from .. import loader, utils
|
||||
|
||||
@loader.tds
|
||||
class LsSendMod(loader.Module):
|
||||
"""Отправка смс в лс по юзеру пользователя."""
|
||||
strings = {'name':'LsSend'}
|
||||
|
||||
async def sendcmd(self, message):
|
||||
""" .send {юзер} {текст или реплай}"""
|
||||
try:
|
||||
reply = await message.get_reply_message()
|
||||
text = utils.get_args_raw(message)
|
||||
|
||||
id = str(text.split(' ')[0])
|
||||
check = []
|
||||
for i in text.split(' '):
|
||||
check.append(i)
|
||||
|
||||
if len(check) <= 1:
|
||||
send = reply
|
||||
else:
|
||||
send = str(text.split(' ', maxsplit=1)[1])
|
||||
if send:
|
||||
await message.client.send_message(id, send)
|
||||
await message.edit('<b>Сообщение успешно отправлено!</b>')
|
||||
else:
|
||||
await message.edit('<b>Не было сделано реплая или нет текста.</b>')
|
||||
except:
|
||||
await message.edit('<b>Неверный юзер, юзера нет вообще, либо ещё какая то ошибка.</b>')
|
||||
|
||||
|
||||
@@ -1,277 +1,277 @@
|
||||
# meta developer: @trololo_1
|
||||
|
||||
from .. import loader, utils
|
||||
import asyncio, pytz, re, telethon
|
||||
from telethon.tl.types import MessageEntityTextUrl
|
||||
import json as JSON
|
||||
from datetime import datetime, date, time
|
||||
|
||||
class NumMod(loader.Module):
|
||||
"Заражает по реплаю."
|
||||
strings={"name": "NumMod"}
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.db = db
|
||||
if not self.db.get("NumMod", "exUsers", False):
|
||||
self.db.set("NumMod", "exUsers", [])
|
||||
if not self.db.get("NumMod", "infList", False):
|
||||
self.db.set("NumMod", "infList", {})
|
||||
|
||||
async def numcmd(self, message):
|
||||
".num [arg] [arg] [arg]....\nВ качестве аргументов используй числа. или первые символы строки."
|
||||
reply = await message.get_reply_message()
|
||||
a = reply.text
|
||||
exlist = self.db.get("NumMod", "exUsers")
|
||||
count_st = 0
|
||||
count_hf = 0
|
||||
if not reply:
|
||||
await message.edit('Нет реплая.')
|
||||
return
|
||||
args = utils.get_args_raw(message)
|
||||
list_args=[]
|
||||
if not args:
|
||||
await message.edit('Нет аргументов')
|
||||
return
|
||||
for i in args.split(' '):
|
||||
if '-' in i:
|
||||
ot_do = i.split('-')
|
||||
try:
|
||||
for x in range(int(ot_do[0]),int(ot_do[1])+1):
|
||||
list_args.append(str(x))
|
||||
except:
|
||||
await message.respond('Используй правильно функцию "от-до"')
|
||||
return
|
||||
else:
|
||||
list_args.append(i)
|
||||
lis = a.splitlines()
|
||||
for start in list_args:
|
||||
for x in lis:
|
||||
if x.lower().startswith(str(start.lower())):
|
||||
count_st = 1
|
||||
if 'href="' in x:
|
||||
count_hf = 1
|
||||
b=x.find('href="')+6
|
||||
c=x.find('">')
|
||||
link = x[b:c]
|
||||
if link.startswith('tg'):
|
||||
list = '@' + link.split('=')[1]
|
||||
if list in exlist:
|
||||
await message.reply(f'Исключение: <code>{list}</code>')
|
||||
else:
|
||||
await message.reply(f'заразить {list}')
|
||||
break
|
||||
elif link.startswith('https://t.me'):
|
||||
a ='@' + str(link.split('/')[3])
|
||||
if a in exlist:
|
||||
await message.reply(f'Исключение: <code>{a}</code>')
|
||||
else:
|
||||
await message.reply(f'заразить {a}')
|
||||
break
|
||||
else:
|
||||
await message.reply('что за хуета?')
|
||||
break
|
||||
await asyncio.sleep(3)
|
||||
|
||||
if not count_st:
|
||||
await message.edit('Не найдено ни одного совпадения в начале строк с аргументами.')
|
||||
|
||||
elif not count_hf:
|
||||
await message.edit('Не найдено ни одной ссылки.')
|
||||
|
||||
elif len(list_args) >= 3:
|
||||
await message.respond('<b>Заражения успешно завершены.</b>')
|
||||
|
||||
async def zarcmd(self, message):
|
||||
"Заражает всех по реплаю."
|
||||
reply = await message.get_reply_message()
|
||||
exlist = self.db.get("NumMod", "exUsers")
|
||||
if not reply:
|
||||
await message.edit('Нет реплая.')
|
||||
return
|
||||
json = JSON.loads(reply.to_json())
|
||||
for i in range(0, len(reply.entities) ):
|
||||
try:
|
||||
link = json["entities"][i]["url"]
|
||||
if link.startswith('tg'):
|
||||
list = '@' + link.split('=')[1]
|
||||
if list in exlist:
|
||||
await message.reply(f'Исключение: <code>{list}</code>')
|
||||
else:
|
||||
await message.reply('заразить ' + list)
|
||||
elif link.startswith('https://t.me'):
|
||||
a ='@' + str(link.split('/')[3])
|
||||
if a in exlist:
|
||||
await message.reply(f'Исключение: <code>{a}</code>')
|
||||
else:
|
||||
await message.reply(f'заразить {a}')
|
||||
else:
|
||||
await message.reply('что за хуета?')
|
||||
except:
|
||||
await message.reply("заразить " + reply.raw_text[json["entities"][i]["offset"]:json["entities"][i]["offset"]+json["entities"][i]["length"]] )
|
||||
await asyncio.sleep(3)
|
||||
await message.delete()
|
||||
|
||||
async def exnumcmd(self, message):
|
||||
"Добавляет исключения в модуль.\nИспользуй: .exnum {@user/@id}"
|
||||
args = utils.get_args_raw(message)
|
||||
exlistGet = self.db.get("NumMod", "exUsers")
|
||||
exlist = exlistGet.copy()
|
||||
if not args:
|
||||
if len(exlist) < 1:
|
||||
await message.edit('Список исключений пуст.')
|
||||
return
|
||||
exsms = ''
|
||||
count = 0
|
||||
for i in exlist:
|
||||
count+=1
|
||||
exsms+=f'<b>{count}.</b> <code>{i}</code>\n'
|
||||
message = await utils.answer(message, exsms)
|
||||
return
|
||||
if args == 'clear':
|
||||
exlist.clear()
|
||||
self.db.set("NumMod", "exUsers", exlist)
|
||||
await message.edit('Список исключений очистен.')
|
||||
return
|
||||
if len(args.split(' ')) > 1 or args[0] != '@':
|
||||
await message.edit('Количество аргументов <b>больше</b> одного, либо начинается <b>не</b> со знака <code>@</code>')
|
||||
return
|
||||
if args in exlist:
|
||||
exlist.remove(args)
|
||||
self.db.set("NumMod", "exUsers", exlist)
|
||||
await message.edit(f'Пользователь <code>{args}</code> исключён.')
|
||||
return
|
||||
exlist.append(args)
|
||||
self.db.set("NumMod", "exUsers", exlist)
|
||||
await message.edit(f'Пользователь <code>{args}</code> добавлен.')
|
||||
|
||||
async def zarlistcmd(self, message):
|
||||
""" Лист ваших заражений.\n.zarlist {@id/user} {count} {args}\nДля удаления: .zarlist {@id/user}\nАргументы:\n-k -- добавить букву k(тысяч) к числу.\n-f -- поиск по ид'у/юзеру.\n-r -- добавлению в список по реплаю."""
|
||||
args = utils.get_args_raw(message)
|
||||
infList = self.db.get("NumMod", "infList")
|
||||
timezone = "Europe/Kiev"
|
||||
vremya = datetime.now(pytz.timezone(timezone)).strftime("%d.%m")
|
||||
try:
|
||||
args_list = args.split(' ')
|
||||
except:
|
||||
pass
|
||||
if not args:
|
||||
if not infList:
|
||||
await utils.answer(message, "Лист заражений <b>пуст</b>.")
|
||||
return
|
||||
sms = ''
|
||||
for key, value in infList.items():
|
||||
sms+=f'<b>• <code>{key}</code> -- <code>{value[0]}</code> [<i>{value[1]}</i>]</b>\n'
|
||||
await utils.answer(message, sms)
|
||||
return
|
||||
if not '-r' in args.lower():
|
||||
if args_list[0] == "clear":
|
||||
infList.clear()
|
||||
self.db.set("NumMod", "infList", infList)
|
||||
await utils.answer(message, "Лист заражений <b>очищен</b>.")
|
||||
elif args_list[0] in infList and '-f' in args.lower():
|
||||
user = infList[args_list[0]]
|
||||
await utils.answer(message, f"<b>• <code>{args_list[0]}</code> -- {user[0]} [<i>{user[1]}</i>]</b>")
|
||||
elif len(args_list) == 1 and args_list[0] in infList:
|
||||
infList.pop(args_list[0])
|
||||
self.db.set("NumMod", "infList", infList)
|
||||
await utils.answer(message, f"Пользователь <code>{args}</code> удалён из списка.")
|
||||
elif args_list[0][0] != '@':
|
||||
await utils.answer(message, 'Это не <b>@ид/юзер</b>.')
|
||||
else:
|
||||
try:
|
||||
user, count = str(args_list[0]), float(args_list[1])
|
||||
except:
|
||||
await utils.answer(message, "Данные были введены не корректно")
|
||||
return
|
||||
k = ''
|
||||
if '-k' in args.lower():
|
||||
k+='k'
|
||||
infList[user] = [str(count)+k, vremya]
|
||||
self.db.set("NumMod", "infList", infList)
|
||||
await utils.answer(message, f"Пользователь <code>{user}</code> добавлен в список заражений.\nЧисло: <code>{count}</code>{k}\nДата: <b>{vremya}</b>")
|
||||
else:
|
||||
reply = await message.get_reply_message()
|
||||
if not reply:
|
||||
return await utils.answer(message, 'Реплай должен быть на смс ириса "<b>...подверг заражению...</b>"')
|
||||
elif reply.sender_id != 707693258 and not 'подверг заражению' in reply.text or not 'подвергла заражению' in reply.text:
|
||||
return await utils.answer(message, 'Реплай должен быть на смс ириса "<b>...подверг заражению...</b>"')
|
||||
else: #☣
|
||||
text = reply.text
|
||||
x = text.index('☣')+4
|
||||
count = text[x:].split(' ', maxsplit=1)[0]
|
||||
x = text.index('user?id=') + 8
|
||||
user = '@' + text[x:].split('"', maxsplit=1)[0]
|
||||
infList[user] = [str(count), vremya]
|
||||
self.db.set("NumMod", "infList", infList)
|
||||
await utils.answer(message, f"Пользователь <code>{user}</code> добавлен в список заражений.\nЧисло: <code>{count}</code>\nДата: <b>{vremya}</b>")
|
||||
|
||||
async def numfiltercmd(self, message):
|
||||
""" .numfilter {args1} {args2 OR reply} \nВызови команду, чтобы просмотреть аргументы."""
|
||||
args = utils.get_args_raw(message)
|
||||
reply = await message.get_reply_message()
|
||||
filter_and_users = self.db.get("NumMod", "numfilter", {'users': [], 'filter': None, 'status': False})
|
||||
if not args:
|
||||
return await utils.answer(message, f"-sU --- добавить|удалить юзеров(не больше 5), на которых будет триггериться фильтр(ид|реплай).\n[{', '.join(list('<code>' + i + '</code>' for i in filter_and_users['users']))}]\n-sF --- установить фильтр. Допустим один.\n<code>{filter_and_users['filter'] if filter_and_users['filter'] else '❌Не установлен.'}</code>\n-t --- запустить|остановить.\n<b>{'✅Запущен' if filter_and_users['status'] else '❌Остановлен'}.</b>\n\nРаботает так:\n[фильтр] (бей|зарази[ть]) (1-10) ((@id|user)|link(даже полный линк ид'а))\n[фильтр] лечись|вакцин[ау]|купи[ть] вакцину\n[фильтр] жертвы|покажи жертв\n[фильтр] лаба?|покажи лабу?\nИгнор регистра!!")
|
||||
args = args.split(' ', maxsplit=1)
|
||||
if len(args) == 1 and not reply and args[0] != '-t':
|
||||
return await utils.answer(message, '❌ Нет 2 аргумента и реплая.')
|
||||
elif args[0] == '-sU':
|
||||
try:
|
||||
user_id = args[1]
|
||||
if not user_id.isdigit():
|
||||
return await utils.answer(message, 'Это не ид.')
|
||||
except:
|
||||
user_id = str(reply.sender_id)
|
||||
if user_id in filter_and_users['users']:
|
||||
filter_and_users['users'].remove(user_id)
|
||||
await utils.answer(message, f"✅ Ид <code>{user_id}</code> удалён.")
|
||||
elif len(filter_and_users['users']) <= 5:
|
||||
filter_and_users['users'].append(user_id)
|
||||
await utils.answer(message, f"✅ Ид <code>{user_id}</code> добавлен.")
|
||||
else:
|
||||
return await utils.answer(message, '❌ Превышен лимит в 5 юзеров.')
|
||||
return self.db.set("NumMod", "numfilter", filter_and_users)
|
||||
elif args[0] == '-sF':
|
||||
try:
|
||||
filter_and_users['filter'] = args[1].lower().strip()
|
||||
self.db.set("NumMod", "numfilter", filter_and_users)
|
||||
return await utils.answer(message, f"✅ Фильтр ~~~ <code>{args[1]}</code> ~~~ успешно установлен!")
|
||||
except:
|
||||
return await utils.answer(message, "Где 2 аргумент❓")
|
||||
elif args[0] == '-t':
|
||||
if filter_and_users['status']:
|
||||
filter_and_users['status'] = False
|
||||
self.db.set("NumMod", "numfilter", filter_and_users)
|
||||
return await utils.answer(message, "❌ Фильтр остановлен.")
|
||||
else:
|
||||
filter_and_users['status'] = True
|
||||
self.db.set("NumMod", "numfilter", filter_and_users)
|
||||
return await utils.answer(message, "✅ Фильтр запущен.")
|
||||
else:
|
||||
return await utils.answer(message, "❌ Неизвестный аргумент.")
|
||||
|
||||
async def watcher(self, message):
|
||||
if not isinstance(message, telethon.tl.types.Message): return
|
||||
filter_and_users = self.db.get("NumMod", "numfilter", {'users': [], 'filter': None, 'status': False})
|
||||
user_id = str(message.sender_id)
|
||||
if not filter_and_users['filter'] or not filter_and_users['status'] or user_id not in filter_and_users['users'] or message.is_private: return
|
||||
text = message.raw_text.lower()
|
||||
if not text.startswith(filter_and_users['filter']): return
|
||||
send_mes = re.search(r"(?P<z>бей\s|зарази[ть]{,2}\s)(?P<lvl>[1-9]?[0]?\s)?(?P<link>@[0-9a-z_]+|(?:https?://)?t\.me/[0-9a-z_]+|tg://openmessage\?user_id=(?P<id>[0-9]+))", text)
|
||||
if send_mes:
|
||||
send_mes = send_mes.groupdict()
|
||||
send_mes['link'], send_mes['id'] = '@'+send_mes['id'] if send_mes['id'] else send_mes['link'], ''
|
||||
send_mes['z'] = 'заразить '
|
||||
send_mes['lvl'] = send_mes['lvl'] if send_mes['lvl'] else ''
|
||||
mes = ''.join(send_mes.values())
|
||||
return await message.respond(mes)
|
||||
send_mes = re.search(r"лечись|вакцин[ау]|купи[ть]{,2} вакцину", text)
|
||||
if send_mes:
|
||||
return await message.respond('.купить вакцину')
|
||||
send_mes = re.search(r"жертвы|покажи жертв", text)
|
||||
if send_mes:
|
||||
return await message.respond('.мои жертвы')
|
||||
send_mes = re.search(r"лаба?|покажи лабу?", text)
|
||||
if send_mes:
|
||||
return await message.respond('.лаб')
|
||||
|
||||
# meta developer: @trololo_1
|
||||
|
||||
from .. import loader, utils
|
||||
import asyncio, pytz, re, telethon
|
||||
from telethon.tl.types import MessageEntityTextUrl
|
||||
import json as JSON
|
||||
from datetime import datetime, date, time
|
||||
|
||||
class NumMod(loader.Module):
|
||||
"Заражает по реплаю."
|
||||
strings={"name": "NumMod"}
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.db = db
|
||||
if not self.db.get("NumMod", "exUsers", False):
|
||||
self.db.set("NumMod", "exUsers", [])
|
||||
if not self.db.get("NumMod", "infList", False):
|
||||
self.db.set("NumMod", "infList", {})
|
||||
|
||||
async def numcmd(self, message):
|
||||
".num [arg] [arg] [arg]....\nВ качестве аргументов используй числа. или первые символы строки."
|
||||
reply = await message.get_reply_message()
|
||||
a = reply.text
|
||||
exlist = self.db.get("NumMod", "exUsers")
|
||||
count_st = 0
|
||||
count_hf = 0
|
||||
if not reply:
|
||||
await message.edit('Нет реплая.')
|
||||
return
|
||||
args = utils.get_args_raw(message)
|
||||
list_args=[]
|
||||
if not args:
|
||||
await message.edit('Нет аргументов')
|
||||
return
|
||||
for i in args.split(' '):
|
||||
if '-' in i:
|
||||
ot_do = i.split('-')
|
||||
try:
|
||||
for x in range(int(ot_do[0]),int(ot_do[1])+1):
|
||||
list_args.append(str(x))
|
||||
except:
|
||||
await message.respond('Используй правильно функцию "от-до"')
|
||||
return
|
||||
else:
|
||||
list_args.append(i)
|
||||
lis = a.splitlines()
|
||||
for start in list_args:
|
||||
for x in lis:
|
||||
if x.lower().startswith(str(start.lower())):
|
||||
count_st = 1
|
||||
if 'href="' in x:
|
||||
count_hf = 1
|
||||
b=x.find('href="')+6
|
||||
c=x.find('">')
|
||||
link = x[b:c]
|
||||
if link.startswith('tg'):
|
||||
list = '@' + link.split('=')[1]
|
||||
if list in exlist:
|
||||
await message.reply(f'Исключение: <code>{list}</code>')
|
||||
else:
|
||||
await message.reply(f'заразить {list}')
|
||||
break
|
||||
elif link.startswith('https://t.me'):
|
||||
a ='@' + str(link.split('/')[3])
|
||||
if a in exlist:
|
||||
await message.reply(f'Исключение: <code>{a}</code>')
|
||||
else:
|
||||
await message.reply(f'заразить {a}')
|
||||
break
|
||||
else:
|
||||
await message.reply('что за хуета?')
|
||||
break
|
||||
await asyncio.sleep(3)
|
||||
|
||||
if not count_st:
|
||||
await message.edit('Не найдено ни одного совпадения в начале строк с аргументами.')
|
||||
|
||||
elif not count_hf:
|
||||
await message.edit('Не найдено ни одной ссылки.')
|
||||
|
||||
elif len(list_args) >= 3:
|
||||
await message.respond('<b>Заражения успешно завершены.</b>')
|
||||
|
||||
async def zarcmd(self, message):
|
||||
"Заражает всех по реплаю."
|
||||
reply = await message.get_reply_message()
|
||||
exlist = self.db.get("NumMod", "exUsers")
|
||||
if not reply:
|
||||
await message.edit('Нет реплая.')
|
||||
return
|
||||
json = JSON.loads(reply.to_json())
|
||||
for i in range(0, len(reply.entities) ):
|
||||
try:
|
||||
link = json["entities"][i]["url"]
|
||||
if link.startswith('tg'):
|
||||
list = '@' + link.split('=')[1]
|
||||
if list in exlist:
|
||||
await message.reply(f'Исключение: <code>{list}</code>')
|
||||
else:
|
||||
await message.reply('заразить ' + list)
|
||||
elif link.startswith('https://t.me'):
|
||||
a ='@' + str(link.split('/')[3])
|
||||
if a in exlist:
|
||||
await message.reply(f'Исключение: <code>{a}</code>')
|
||||
else:
|
||||
await message.reply(f'заразить {a}')
|
||||
else:
|
||||
await message.reply('что за хуета?')
|
||||
except:
|
||||
await message.reply("заразить " + reply.raw_text[json["entities"][i]["offset"]:json["entities"][i]["offset"]+json["entities"][i]["length"]] )
|
||||
await asyncio.sleep(3)
|
||||
await message.delete()
|
||||
|
||||
async def exnumcmd(self, message):
|
||||
"Добавляет исключения в модуль.\nИспользуй: .exnum {@user/@id}"
|
||||
args = utils.get_args_raw(message)
|
||||
exlistGet = self.db.get("NumMod", "exUsers")
|
||||
exlist = exlistGet.copy()
|
||||
if not args:
|
||||
if len(exlist) < 1:
|
||||
await message.edit('Список исключений пуст.')
|
||||
return
|
||||
exsms = ''
|
||||
count = 0
|
||||
for i in exlist:
|
||||
count+=1
|
||||
exsms+=f'<b>{count}.</b> <code>{i}</code>\n'
|
||||
message = await utils.answer(message, exsms)
|
||||
return
|
||||
if args == 'clear':
|
||||
exlist.clear()
|
||||
self.db.set("NumMod", "exUsers", exlist)
|
||||
await message.edit('Список исключений очистен.')
|
||||
return
|
||||
if len(args.split(' ')) > 1 or args[0] != '@':
|
||||
await message.edit('Количество аргументов <b>больше</b> одного, либо начинается <b>не</b> со знака <code>@</code>')
|
||||
return
|
||||
if args in exlist:
|
||||
exlist.remove(args)
|
||||
self.db.set("NumMod", "exUsers", exlist)
|
||||
await message.edit(f'Пользователь <code>{args}</code> исключён.')
|
||||
return
|
||||
exlist.append(args)
|
||||
self.db.set("NumMod", "exUsers", exlist)
|
||||
await message.edit(f'Пользователь <code>{args}</code> добавлен.')
|
||||
|
||||
async def zarlistcmd(self, message):
|
||||
""" Лист ваших заражений.\n.zarlist {@id/user} {count} {args}\nДля удаления: .zarlist {@id/user}\nАргументы:\n-k -- добавить букву k(тысяч) к числу.\n-f -- поиск по ид'у/юзеру.\n-r -- добавлению в список по реплаю."""
|
||||
args = utils.get_args_raw(message)
|
||||
infList = self.db.get("NumMod", "infList")
|
||||
timezone = "Europe/Kiev"
|
||||
vremya = datetime.now(pytz.timezone(timezone)).strftime("%d.%m")
|
||||
try:
|
||||
args_list = args.split(' ')
|
||||
except:
|
||||
pass
|
||||
if not args:
|
||||
if not infList:
|
||||
await utils.answer(message, "Лист заражений <b>пуст</b>.")
|
||||
return
|
||||
sms = ''
|
||||
for key, value in infList.items():
|
||||
sms+=f'<b>• <code>{key}</code> -- <code>{value[0]}</code> [<i>{value[1]}</i>]</b>\n'
|
||||
await utils.answer(message, sms)
|
||||
return
|
||||
if not '-r' in args.lower():
|
||||
if args_list[0] == "clear":
|
||||
infList.clear()
|
||||
self.db.set("NumMod", "infList", infList)
|
||||
await utils.answer(message, "Лист заражений <b>очищен</b>.")
|
||||
elif args_list[0] in infList and '-f' in args.lower():
|
||||
user = infList[args_list[0]]
|
||||
await utils.answer(message, f"<b>• <code>{args_list[0]}</code> -- {user[0]} [<i>{user[1]}</i>]</b>")
|
||||
elif len(args_list) == 1 and args_list[0] in infList:
|
||||
infList.pop(args_list[0])
|
||||
self.db.set("NumMod", "infList", infList)
|
||||
await utils.answer(message, f"Пользователь <code>{args}</code> удалён из списка.")
|
||||
elif args_list[0][0] != '@':
|
||||
await utils.answer(message, 'Это не <b>@ид/юзер</b>.')
|
||||
else:
|
||||
try:
|
||||
user, count = str(args_list[0]), float(args_list[1])
|
||||
except:
|
||||
await utils.answer(message, "Данные были введены не корректно")
|
||||
return
|
||||
k = ''
|
||||
if '-k' in args.lower():
|
||||
k+='k'
|
||||
infList[user] = [str(count)+k, vremya]
|
||||
self.db.set("NumMod", "infList", infList)
|
||||
await utils.answer(message, f"Пользователь <code>{user}</code> добавлен в список заражений.\nЧисло: <code>{count}</code>{k}\nДата: <b>{vremya}</b>")
|
||||
else:
|
||||
reply = await message.get_reply_message()
|
||||
if not reply:
|
||||
return await utils.answer(message, 'Реплай должен быть на смс ириса "<b>...подверг заражению...</b>"')
|
||||
elif reply.sender_id != 707693258 and not 'подверг заражению' in reply.text or not 'подвергла заражению' in reply.text:
|
||||
return await utils.answer(message, 'Реплай должен быть на смс ириса "<b>...подверг заражению...</b>"')
|
||||
else: #☣
|
||||
text = reply.text
|
||||
x = text.index('☣')+4
|
||||
count = text[x:].split(' ', maxsplit=1)[0]
|
||||
x = text.index('user?id=') + 8
|
||||
user = '@' + text[x:].split('"', maxsplit=1)[0]
|
||||
infList[user] = [str(count), vremya]
|
||||
self.db.set("NumMod", "infList", infList)
|
||||
await utils.answer(message, f"Пользователь <code>{user}</code> добавлен в список заражений.\nЧисло: <code>{count}</code>\nДата: <b>{vremya}</b>")
|
||||
|
||||
async def numfiltercmd(self, message):
|
||||
""" .numfilter {args1} {args2 OR reply} \nВызови команду, чтобы просмотреть аргументы."""
|
||||
args = utils.get_args_raw(message)
|
||||
reply = await message.get_reply_message()
|
||||
filter_and_users = self.db.get("NumMod", "numfilter", {'users': [], 'filter': None, 'status': False})
|
||||
if not args:
|
||||
return await utils.answer(message, f"-sU --- добавить|удалить юзеров(не больше 5), на которых будет триггериться фильтр(ид|реплай).\n[{', '.join(list('<code>' + i + '</code>' for i in filter_and_users['users']))}]\n-sF --- установить фильтр. Допустим один.\n<code>{filter_and_users['filter'] if filter_and_users['filter'] else '❌Не установлен.'}</code>\n-t --- запустить|остановить.\n<b>{'✅Запущен' if filter_and_users['status'] else '❌Остановлен'}.</b>\n\nРаботает так:\n[фильтр] (бей|зарази[ть]) (1-10) ((@id|user)|link(даже полный линк ид'а))\n[фильтр] лечись|вакцин[ау]|купи[ть] вакцину\n[фильтр] жертвы|покажи жертв\n[фильтр] лаба?|покажи лабу?\nИгнор регистра!!")
|
||||
args = args.split(' ', maxsplit=1)
|
||||
if len(args) == 1 and not reply and args[0] != '-t':
|
||||
return await utils.answer(message, '❌ Нет 2 аргумента и реплая.')
|
||||
elif args[0] == '-sU':
|
||||
try:
|
||||
user_id = args[1]
|
||||
if not user_id.isdigit():
|
||||
return await utils.answer(message, 'Это не ид.')
|
||||
except:
|
||||
user_id = str(reply.sender_id)
|
||||
if user_id in filter_and_users['users']:
|
||||
filter_and_users['users'].remove(user_id)
|
||||
await utils.answer(message, f"✅ Ид <code>{user_id}</code> удалён.")
|
||||
elif len(filter_and_users['users']) <= 5:
|
||||
filter_and_users['users'].append(user_id)
|
||||
await utils.answer(message, f"✅ Ид <code>{user_id}</code> добавлен.")
|
||||
else:
|
||||
return await utils.answer(message, '❌ Превышен лимит в 5 юзеров.')
|
||||
return self.db.set("NumMod", "numfilter", filter_and_users)
|
||||
elif args[0] == '-sF':
|
||||
try:
|
||||
filter_and_users['filter'] = args[1].lower().strip()
|
||||
self.db.set("NumMod", "numfilter", filter_and_users)
|
||||
return await utils.answer(message, f"✅ Фильтр ~~~ <code>{args[1]}</code> ~~~ успешно установлен!")
|
||||
except:
|
||||
return await utils.answer(message, "Где 2 аргумент❓")
|
||||
elif args[0] == '-t':
|
||||
if filter_and_users['status']:
|
||||
filter_and_users['status'] = False
|
||||
self.db.set("NumMod", "numfilter", filter_and_users)
|
||||
return await utils.answer(message, "❌ Фильтр остановлен.")
|
||||
else:
|
||||
filter_and_users['status'] = True
|
||||
self.db.set("NumMod", "numfilter", filter_and_users)
|
||||
return await utils.answer(message, "✅ Фильтр запущен.")
|
||||
else:
|
||||
return await utils.answer(message, "❌ Неизвестный аргумент.")
|
||||
|
||||
async def watcher(self, message):
|
||||
if not isinstance(message, telethon.tl.types.Message): return
|
||||
filter_and_users = self.db.get("NumMod", "numfilter", {'users': [], 'filter': None, 'status': False})
|
||||
user_id = str(message.sender_id)
|
||||
if not filter_and_users['filter'] or not filter_and_users['status'] or user_id not in filter_and_users['users'] or message.is_private: return
|
||||
text = message.raw_text.lower()
|
||||
if not text.startswith(filter_and_users['filter']): return
|
||||
send_mes = re.search(r"(?P<z>бей\s|зарази[ть]{,2}\s)(?P<lvl>[1-9]?[0]?\s)?(?P<link>@[0-9a-z_]+|(?:https?://)?t\.me/[0-9a-z_]+|tg://openmessage\?user_id=(?P<id>[0-9]+))", text)
|
||||
if send_mes:
|
||||
send_mes = send_mes.groupdict()
|
||||
send_mes['link'], send_mes['id'] = '@'+send_mes['id'] if send_mes['id'] else send_mes['link'], ''
|
||||
send_mes['z'] = 'заразить '
|
||||
send_mes['lvl'] = send_mes['lvl'] if send_mes['lvl'] else ''
|
||||
mes = ''.join(send_mes.values())
|
||||
return await message.respond(mes)
|
||||
send_mes = re.search(r"лечись|вакцин[ау]|купи[ть]{,2} вакцину", text)
|
||||
if send_mes:
|
||||
return await message.respond('.купить вакцину')
|
||||
send_mes = re.search(r"жертвы|покажи жертв", text)
|
||||
if send_mes:
|
||||
return await message.respond('.мои жертвы')
|
||||
send_mes = re.search(r"лаба?|покажи лабу?", text)
|
||||
if send_mes:
|
||||
return await message.respond('.лаб')
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,146 +1,146 @@
|
||||
from .. import loader, utils
|
||||
from datetime import datetime, date, time
|
||||
from asyncio import sleep
|
||||
import os, io, asyncio, pytz, requests
|
||||
|
||||
|
||||
@loader.tds
|
||||
class SeeChatMod(loader.Module):
|
||||
"""tracking in all PM chats."""
|
||||
strings={"name": "SeeChat"}
|
||||
|
||||
async def client_ready(self, message, db):
|
||||
self.db = db
|
||||
self.db.set("SeeChat", "seechat", True)
|
||||
self.di = "SeeChat/"
|
||||
if not os.path.exists(self.di):
|
||||
os.mkdir(self.di)
|
||||
|
||||
async def seechatcmd(self, message):
|
||||
"""use: .seechat | to enable tracking in all PM chats."""
|
||||
|
||||
if self.db.get("SeeChat", "seechat") is not True:
|
||||
await utils.answer(message, "[SeeChat] turned <b>on</b> succesfully.")
|
||||
self.db.set("SeeChat", "seechat", True)
|
||||
else:
|
||||
await utils.answer(message, "[SeeChat] turned <b>off</b> succesfully.")
|
||||
self.db.set("SeeChat", "seechat", False)
|
||||
|
||||
async def setchatcmd(self, message):
|
||||
"""use: .setchat | to set this chat as a track chat."""
|
||||
|
||||
chat = await message.client.get_entity(message.to_id)
|
||||
self.db.set("SeeChat", "log", str(chat.id))
|
||||
await utils.answer(message, f"<b>this chat was set as a chat for tracks.</b>")
|
||||
|
||||
async def seechatscmd(self, message):
|
||||
"""use: .seechats | to see the list of tracking people."""
|
||||
|
||||
await utils.answer(message, "wait a second..")
|
||||
chats = ""
|
||||
for userId in enumerate(os.listdir(self.di)):
|
||||
try:
|
||||
user = await message.client.get_entity(int(userId[1][:-4]))
|
||||
except: pass
|
||||
if not user.deleted:
|
||||
chats += f"{userId[0]+1} • <a href=tg://user?id={user.id}>{user.first_name}</a> ID: [<code>{user.id}</code>]\n"
|
||||
else:
|
||||
chats += f"{userId[0]+1} • deleted account ID: [<code>{user.id}</code>]\n"
|
||||
await utils.answer(message, "<b>Tracking users:</b>\n\n" + chats)
|
||||
|
||||
async def gseecmd(self, message):
|
||||
"""use: .gsee {id} | to get the tracked file."""
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
return await utils.answer(message, "<b>what about args?</b>")
|
||||
try:
|
||||
user = await message.client.get_entity(int(args))
|
||||
await utils.answer(message, f"<b>PM file with: <code>{user.first_name}</code></b>")
|
||||
await message.client.send_file(message.to_id, f"{self.di}{args}.txt")
|
||||
except: return await utils.answer(message, "<b>file is empty.</b>")
|
||||
|
||||
async def delseecmd(self, message):
|
||||
"""use: .delsee {id} | to delete the tracked file."""
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
return await utils.answer(message, "<b>what about args?</b>")
|
||||
if args == "all":
|
||||
os.system(f"rm -rf {self.di}*")
|
||||
await utils.answer(message, "<b>all PM chats file has been successfully deleted.</b>")
|
||||
else:
|
||||
try:
|
||||
user = await message.client.get_entity(int(args))
|
||||
await utils.answer(message, f"<b>the chat file has been deleted with: <code>{user.first_name}</code></b>")
|
||||
os.remove(f"{self.di}{args}.txt")
|
||||
except: return await utils.answer(message, "<b>file can't be deleted.</b>")
|
||||
|
||||
async def excseecmd(self, message):
|
||||
"""use: .excsee {id} | to add / remove user from exclude tracking."""
|
||||
exception = self.db.get("SeeChat", "exception", [])
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
return await utils.answer(message, "<b>what about args?</b>")
|
||||
if args == "clear":
|
||||
self.db.set("SeeChat", "exception", [])
|
||||
return await utils.answer(message, "<b>the exclusion list was cleared successfully.</b>")
|
||||
try:
|
||||
user = await message.client.get_entity(int(args))
|
||||
if str(user.id) not in exception:
|
||||
exception.append(str(user.id))
|
||||
await utils.answer(message, f"<b>{user.first_name}, has been added to the list of exclusions.</b>")
|
||||
os.remove(f"{self.di}{user.id}.txt")
|
||||
else:
|
||||
exception.remove(str(user.id))
|
||||
await utils.answer(message, f"<b>{user.first_name}, has been removed from the list of exclusions.</b>")
|
||||
self.db.set("SeeChat", "exception", exception)
|
||||
except: return await utils.answer(message, "<b>failed to remove user from the list of exclusions</b>")
|
||||
|
||||
async def exclistcmd(self, message):
|
||||
"""use: .exclist | to see the list of exceptions."""
|
||||
exception = self.db.get("SeeChat", "exception", [])
|
||||
users = ""
|
||||
try:
|
||||
for exc in enumerate(exception):
|
||||
user = await message.client.get_entity(int(exc[1]))
|
||||
users += f"{exc[0]+1} • <a href=tg://user?id={user.id}>{user.first_name}</a> ID: [<code>{user.id}</code>]\n"
|
||||
await utils.answer(message, "<b>List of exclusions:</b>\n\n" + users)
|
||||
except Exception as e: return await utils.answer(message, f"<b>the list of users is empty.</b> {e}")
|
||||
|
||||
async def watcher(self, message):
|
||||
me = await message.client.get_me()
|
||||
seechat = self.db.get("SeeChat", "seechat")
|
||||
exception = self.db.get("SeeChat", "exception", [])
|
||||
log = self.db.get("SeeChat", "log", str(me.id))
|
||||
chat = await message.client.get_entity(int(log))
|
||||
timezone = "Europe/Kiev"
|
||||
vremya = datetime.now(pytz.timezone(timezone)).strftime("[%Y-%m-%d %H:%M:%S]")
|
||||
user = await message.client.get_entity(message.chat_id)
|
||||
userid = str(user.id)
|
||||
try:
|
||||
if message.sender_id == me.id: user.first_name = me.first_name
|
||||
except: pass
|
||||
if message.is_private and seechat and userid not in exception and not user.bot and not user.verified:
|
||||
if message.text:
|
||||
file = open(f"{self.di}{user.id}.txt", "a", encoding='utf-8')
|
||||
file.write(f"{user.first_name} >> {message.text} << {vremya}\n\n")
|
||||
if message.sender_id == me.id:
|
||||
return
|
||||
if message.video:
|
||||
try:
|
||||
await message.forward_to(chat.id)
|
||||
except:
|
||||
file = message.file.name or "huita" + message.file.ext
|
||||
await message.download_media(file)
|
||||
await message.client.send_message(chat.id, f"<b>Video from</b> <a href='tg://user?id={user.id}'>{user.first_name}</a>:")
|
||||
await message.client.send_file(chat.id, file)
|
||||
os.remove(file)
|
||||
elif message.photo:
|
||||
file = io.BytesIO()
|
||||
file.name = message.file.name or f"SeeChat{message.file.ext}"
|
||||
await message.client.download_file(message, file)
|
||||
file.seek(0)
|
||||
await message.client.send_message(chat.id, f"<b>Picture from</b> <a href='tg://user?id={user.id}'>{user.first_name}</a>:")
|
||||
await message.client.send_file(chat.id, file, force_document=False)
|
||||
elif message.voice or message.audio or message.video_note or message.document:
|
||||
await message.client.send_message(chat.id, f"<b>Media from</b> <a href='tg://user?id={user.id}'>{user.first_name}</a>:")
|
||||
from .. import loader, utils
|
||||
from datetime import datetime, date, time
|
||||
from asyncio import sleep
|
||||
import os, io, asyncio, pytz, requests
|
||||
|
||||
|
||||
@loader.tds
|
||||
class SeeChatMod(loader.Module):
|
||||
"""tracking in all PM chats."""
|
||||
strings={"name": "SeeChat"}
|
||||
|
||||
async def client_ready(self, message, db):
|
||||
self.db = db
|
||||
self.db.set("SeeChat", "seechat", True)
|
||||
self.di = "SeeChat/"
|
||||
if not os.path.exists(self.di):
|
||||
os.mkdir(self.di)
|
||||
|
||||
async def seechatcmd(self, message):
|
||||
"""use: .seechat | to enable tracking in all PM chats."""
|
||||
|
||||
if self.db.get("SeeChat", "seechat") is not True:
|
||||
await utils.answer(message, "[SeeChat] turned <b>on</b> succesfully.")
|
||||
self.db.set("SeeChat", "seechat", True)
|
||||
else:
|
||||
await utils.answer(message, "[SeeChat] turned <b>off</b> succesfully.")
|
||||
self.db.set("SeeChat", "seechat", False)
|
||||
|
||||
async def setchatcmd(self, message):
|
||||
"""use: .setchat | to set this chat as a track chat."""
|
||||
|
||||
chat = await message.client.get_entity(message.to_id)
|
||||
self.db.set("SeeChat", "log", str(chat.id))
|
||||
await utils.answer(message, f"<b>this chat was set as a chat for tracks.</b>")
|
||||
|
||||
async def seechatscmd(self, message):
|
||||
"""use: .seechats | to see the list of tracking people."""
|
||||
|
||||
await utils.answer(message, "wait a second..")
|
||||
chats = ""
|
||||
for userId in enumerate(os.listdir(self.di)):
|
||||
try:
|
||||
user = await message.client.get_entity(int(userId[1][:-4]))
|
||||
except: pass
|
||||
if not user.deleted:
|
||||
chats += f"{userId[0]+1} • <a href=tg://user?id={user.id}>{user.first_name}</a> ID: [<code>{user.id}</code>]\n"
|
||||
else:
|
||||
chats += f"{userId[0]+1} • deleted account ID: [<code>{user.id}</code>]\n"
|
||||
await utils.answer(message, "<b>Tracking users:</b>\n\n" + chats)
|
||||
|
||||
async def gseecmd(self, message):
|
||||
"""use: .gsee {id} | to get the tracked file."""
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
return await utils.answer(message, "<b>what about args?</b>")
|
||||
try:
|
||||
user = await message.client.get_entity(int(args))
|
||||
await utils.answer(message, f"<b>PM file with: <code>{user.first_name}</code></b>")
|
||||
await message.client.send_file(message.to_id, f"{self.di}{args}.txt")
|
||||
except: return await utils.answer(message, "<b>file is empty.</b>")
|
||||
|
||||
async def delseecmd(self, message):
|
||||
"""use: .delsee {id} | to delete the tracked file."""
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
return await utils.answer(message, "<b>what about args?</b>")
|
||||
if args == "all":
|
||||
os.system(f"rm -rf {self.di}*")
|
||||
await utils.answer(message, "<b>all PM chats file has been successfully deleted.</b>")
|
||||
else:
|
||||
try:
|
||||
user = await message.client.get_entity(int(args))
|
||||
await utils.answer(message, f"<b>the chat file has been deleted with: <code>{user.first_name}</code></b>")
|
||||
os.remove(f"{self.di}{args}.txt")
|
||||
except: return await utils.answer(message, "<b>file can't be deleted.</b>")
|
||||
|
||||
async def excseecmd(self, message):
|
||||
"""use: .excsee {id} | to add / remove user from exclude tracking."""
|
||||
exception = self.db.get("SeeChat", "exception", [])
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
return await utils.answer(message, "<b>what about args?</b>")
|
||||
if args == "clear":
|
||||
self.db.set("SeeChat", "exception", [])
|
||||
return await utils.answer(message, "<b>the exclusion list was cleared successfully.</b>")
|
||||
try:
|
||||
user = await message.client.get_entity(int(args))
|
||||
if str(user.id) not in exception:
|
||||
exception.append(str(user.id))
|
||||
await utils.answer(message, f"<b>{user.first_name}, has been added to the list of exclusions.</b>")
|
||||
os.remove(f"{self.di}{user.id}.txt")
|
||||
else:
|
||||
exception.remove(str(user.id))
|
||||
await utils.answer(message, f"<b>{user.first_name}, has been removed from the list of exclusions.</b>")
|
||||
self.db.set("SeeChat", "exception", exception)
|
||||
except: return await utils.answer(message, "<b>failed to remove user from the list of exclusions</b>")
|
||||
|
||||
async def exclistcmd(self, message):
|
||||
"""use: .exclist | to see the list of exceptions."""
|
||||
exception = self.db.get("SeeChat", "exception", [])
|
||||
users = ""
|
||||
try:
|
||||
for exc in enumerate(exception):
|
||||
user = await message.client.get_entity(int(exc[1]))
|
||||
users += f"{exc[0]+1} • <a href=tg://user?id={user.id}>{user.first_name}</a> ID: [<code>{user.id}</code>]\n"
|
||||
await utils.answer(message, "<b>List of exclusions:</b>\n\n" + users)
|
||||
except Exception as e: return await utils.answer(message, f"<b>the list of users is empty.</b> {e}")
|
||||
|
||||
async def watcher(self, message):
|
||||
me = await message.client.get_me()
|
||||
seechat = self.db.get("SeeChat", "seechat")
|
||||
exception = self.db.get("SeeChat", "exception", [])
|
||||
log = self.db.get("SeeChat", "log", str(me.id))
|
||||
chat = await message.client.get_entity(int(log))
|
||||
timezone = "Europe/Kiev"
|
||||
vremya = datetime.now(pytz.timezone(timezone)).strftime("[%Y-%m-%d %H:%M:%S]")
|
||||
user = await message.client.get_entity(message.chat_id)
|
||||
userid = str(user.id)
|
||||
try:
|
||||
if message.sender_id == me.id: user.first_name = me.first_name
|
||||
except: pass
|
||||
if message.is_private and seechat and userid not in exception and not user.bot and not user.verified:
|
||||
if message.text:
|
||||
file = open(f"{self.di}{user.id}.txt", "a", encoding='utf-8')
|
||||
file.write(f"{user.first_name} >> {message.text} << {vremya}\n\n")
|
||||
if message.sender_id == me.id:
|
||||
return
|
||||
if message.video:
|
||||
try:
|
||||
await message.forward_to(chat.id)
|
||||
except:
|
||||
file = message.file.name or "huita" + message.file.ext
|
||||
await message.download_media(file)
|
||||
await message.client.send_message(chat.id, f"<b>Video from</b> <a href='tg://user?id={user.id}'>{user.first_name}</a>:")
|
||||
await message.client.send_file(chat.id, file)
|
||||
os.remove(file)
|
||||
elif message.photo:
|
||||
file = io.BytesIO()
|
||||
file.name = message.file.name or f"SeeChat{message.file.ext}"
|
||||
await message.client.download_file(message, file)
|
||||
file.seek(0)
|
||||
await message.client.send_message(chat.id, f"<b>Picture from</b> <a href='tg://user?id={user.id}'>{user.first_name}</a>:")
|
||||
await message.client.send_file(chat.id, file, force_document=False)
|
||||
elif message.voice or message.audio or message.video_note or message.document:
|
||||
await message.client.send_message(chat.id, f"<b>Media from</b> <a href='tg://user?id={user.id}'>{user.first_name}</a>:")
|
||||
await message.forward_to(chat.id)
|
||||
File diff suppressed because one or more lines are too long
@@ -1,102 +1,102 @@
|
||||
# meta developer: @trololo_1
|
||||
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
from .. import loader, utils
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@loader.tds
|
||||
class VijenerMod(loader.Module):
|
||||
"""Конвертация текста в шифр Виженеря и наоборот. """
|
||||
strings = {
|
||||
"name": "Vizjener"
|
||||
}
|
||||
|
||||
|
||||
@loader.unrestricted
|
||||
async def tovizcmd(self, message):
|
||||
""".toviz {ключ} {текст}"""
|
||||
try:
|
||||
alphabet = ['','а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я']
|
||||
text = utils.get_args_raw(message)
|
||||
key = str(text.split(' ')[0])
|
||||
shifr = str(text.split(' ', maxsplit=1)[1])
|
||||
key_list = []
|
||||
shifr_list = []
|
||||
for word in key.split():
|
||||
for letter in word.lower():
|
||||
key_list.append(letter)
|
||||
|
||||
for word in shifr.split():
|
||||
for letter in word.lower():
|
||||
shifr_list.append(letter)
|
||||
shifr_list.append(' ')
|
||||
|
||||
key_index = 0
|
||||
sms = ''
|
||||
for i in range(0, len(shifr_list )):
|
||||
if shifr_list[i].isalpha():
|
||||
if key_index == len(key_list):
|
||||
key_index = 0
|
||||
a = alphabet.index(shifr_list[i])
|
||||
b = alphabet.index(key_list[key_index])
|
||||
result = int(a) + int(b)
|
||||
if result >= 33:
|
||||
result=result%33
|
||||
if result == 0:
|
||||
result=33
|
||||
sms+=alphabet[result]
|
||||
|
||||
key_index+=1
|
||||
else:
|
||||
sms+=shifr_list[i]
|
||||
await message.edit(sms)
|
||||
except:
|
||||
await message.edit('<strong> ERROR. Возможно вы ввели некириллические символы, либо ввели в ключ что то кроме буквенных символов. </strong>')
|
||||
|
||||
|
||||
@loader.unrestricted
|
||||
async def tounvizcmd(self, message):
|
||||
""".tounviz {ключ} {текст}"""
|
||||
try:
|
||||
alphabet = ['', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я']
|
||||
text = utils.get_args_raw(message)
|
||||
key = str(text.split(' ')[0])
|
||||
shifr = str(text.split(' ', maxsplit=1)[1])
|
||||
key_list = []
|
||||
shifr_list = []
|
||||
for word in key.split():
|
||||
for letter in word.lower():
|
||||
key_list.append(letter)
|
||||
|
||||
for word in shifr.split():
|
||||
for letter in word.lower():
|
||||
shifr_list.append(letter)
|
||||
shifr_list.append(' ')
|
||||
|
||||
key_index = 0
|
||||
sms = ''
|
||||
for i in range(0, len(shifr_list )):
|
||||
if shifr_list[i].isalpha():
|
||||
if key_index == len(key_list):
|
||||
key_index = 0
|
||||
a = alphabet.index(shifr_list[i])
|
||||
b = alphabet.index(key_list[key_index])
|
||||
if int(b) == 33:
|
||||
result = int(a) % int(b)
|
||||
else:
|
||||
result = int(a) - int(b)
|
||||
if result < 0:
|
||||
result=result-1
|
||||
if result == 0:
|
||||
result=33
|
||||
sms+=alphabet[result]
|
||||
key_index+=1
|
||||
else:
|
||||
sms+=shifr_list[i]
|
||||
await message.edit(sms)
|
||||
except:
|
||||
await message.edit('<strong> ERROR. Возможно вы ввели некириллические символы, либо ввели в ключ что то кроме буквенных символов. </strong>')
|
||||
# meta developer: @trololo_1
|
||||
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
from .. import loader, utils
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@loader.tds
|
||||
class VijenerMod(loader.Module):
|
||||
"""Конвертация текста в шифр Виженеря и наоборот. """
|
||||
strings = {
|
||||
"name": "Vizjener"
|
||||
}
|
||||
|
||||
|
||||
@loader.unrestricted
|
||||
async def tovizcmd(self, message):
|
||||
""".toviz {ключ} {текст}"""
|
||||
try:
|
||||
alphabet = ['','а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я']
|
||||
text = utils.get_args_raw(message)
|
||||
key = str(text.split(' ')[0])
|
||||
shifr = str(text.split(' ', maxsplit=1)[1])
|
||||
key_list = []
|
||||
shifr_list = []
|
||||
for word in key.split():
|
||||
for letter in word.lower():
|
||||
key_list.append(letter)
|
||||
|
||||
for word in shifr.split():
|
||||
for letter in word.lower():
|
||||
shifr_list.append(letter)
|
||||
shifr_list.append(' ')
|
||||
|
||||
key_index = 0
|
||||
sms = ''
|
||||
for i in range(0, len(shifr_list )):
|
||||
if shifr_list[i].isalpha():
|
||||
if key_index == len(key_list):
|
||||
key_index = 0
|
||||
a = alphabet.index(shifr_list[i])
|
||||
b = alphabet.index(key_list[key_index])
|
||||
result = int(a) + int(b)
|
||||
if result >= 33:
|
||||
result=result%33
|
||||
if result == 0:
|
||||
result=33
|
||||
sms+=alphabet[result]
|
||||
|
||||
key_index+=1
|
||||
else:
|
||||
sms+=shifr_list[i]
|
||||
await message.edit(sms)
|
||||
except:
|
||||
await message.edit('<strong> ERROR. Возможно вы ввели некириллические символы, либо ввели в ключ что то кроме буквенных символов. </strong>')
|
||||
|
||||
|
||||
@loader.unrestricted
|
||||
async def tounvizcmd(self, message):
|
||||
""".tounviz {ключ} {текст}"""
|
||||
try:
|
||||
alphabet = ['', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я']
|
||||
text = utils.get_args_raw(message)
|
||||
key = str(text.split(' ')[0])
|
||||
shifr = str(text.split(' ', maxsplit=1)[1])
|
||||
key_list = []
|
||||
shifr_list = []
|
||||
for word in key.split():
|
||||
for letter in word.lower():
|
||||
key_list.append(letter)
|
||||
|
||||
for word in shifr.split():
|
||||
for letter in word.lower():
|
||||
shifr_list.append(letter)
|
||||
shifr_list.append(' ')
|
||||
|
||||
key_index = 0
|
||||
sms = ''
|
||||
for i in range(0, len(shifr_list )):
|
||||
if shifr_list[i].isalpha():
|
||||
if key_index == len(key_list):
|
||||
key_index = 0
|
||||
a = alphabet.index(shifr_list[i])
|
||||
b = alphabet.index(key_list[key_index])
|
||||
if int(b) == 33:
|
||||
result = int(a) % int(b)
|
||||
else:
|
||||
result = int(a) - int(b)
|
||||
if result < 0:
|
||||
result=result-1
|
||||
if result == 0:
|
||||
result=33
|
||||
sms+=alphabet[result]
|
||||
key_index+=1
|
||||
else:
|
||||
sms+=shifr_list[i]
|
||||
await message.edit(sms)
|
||||
except:
|
||||
await message.edit('<strong> ERROR. Возможно вы ввели некириллические символы, либо ввели в ключ что то кроме буквенных символов. </strong>')
|
||||
|
||||
@@ -1,66 +1,66 @@
|
||||
# for more info: https://murix.ru/files/ftg
|
||||
# by xadjilut, 2021
|
||||
# Изменил для мубота @trololo_1
|
||||
|
||||
from .. import loader, utils
|
||||
import asyncio
|
||||
|
||||
@loader.tds
|
||||
class FarmMooBotMod(loader.Module):
|
||||
"""Для автоматического фарминга мубота.\n отправляет мус, кликает, затем мук, кликает. и всё по циклу."""
|
||||
strings = {
|
||||
'name': 'FarmMooBot',
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.name = self.strings['name']
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.client = client
|
||||
self.db = db
|
||||
self.moo = 1606812809
|
||||
if not self.db.get(self.name, "status", False):
|
||||
self.db.set(self.name, 'status', {'status': False, 'time': None, 'btn1': None, 'btn2': None})
|
||||
|
||||
async def mbfoncmd(self, message):
|
||||
"""Запустить автофарминг.\n.mbfon {интервал отправки} {первая кнопка} {вторая кнопка} | кнопки указывать по очередности."""
|
||||
args = utils.get_args_raw(message)
|
||||
if not args: return await utils.answer(message, 'Где аргументы?')
|
||||
args = args.split(' ')
|
||||
if not args[0].isdigit() or not args[1].isdigit() or not args[2].isdigit(): return await utils.answer(message, 'Один или более аргументов указан не корректно. Вводите только числовые значения!!')
|
||||
status = self.db.get(self.name, "status", False)
|
||||
if status['time']: return await utils.answer(message, 'Уже запущено.')
|
||||
self.db.set(self.name, "status", {'status': True, 'time': args[0], 'btn1': args[1], 'btn2': args[2]})
|
||||
await self.client.send_message(self.moo, 'мус')
|
||||
await utils.answer(message, 'Запущено.')
|
||||
|
||||
async def mbfoffcmd(self, message):
|
||||
"""Остановить автофармин."""
|
||||
self.db.set(self.name, 'status', {'status': False, 'time': None, 'btn1': None, 'btn2': None})
|
||||
await utils.answer(message, 'Остановлено.')
|
||||
|
||||
async def watcher(self, message):
|
||||
try:
|
||||
chat = utils.get_chat_id(message)
|
||||
if chat != self.moo: return
|
||||
args = self.db.get(self.name, 'status', False)
|
||||
if not args: return
|
||||
if not args['status'] or message.sender_id != self.moo or message.sticker: return
|
||||
try:
|
||||
if not '🐮' in message.text and '<strong>' in message.text and args['status']: await message.click(int(args['btn1']) - 1)
|
||||
await asyncio.sleep(3)
|
||||
if args['status'] and not '🐮' in message.text and '<strong>' in message.text: await self.client.send_message(self.moo, 'мук')
|
||||
except:
|
||||
if args['status']: await self.client.send_message(self.moo, 'мус')
|
||||
if not '🐮' in message.text and '<strong>' in message.text and args['status']: await message.click(int(args['btn1']) - 1)
|
||||
try:
|
||||
if '🐮' in message.text or args['status']: await message.click(int(args['btn2']) - 1)
|
||||
except:
|
||||
if args['status']: await self.client.send_message(self.moo, 'мук')
|
||||
if '🐮' in message.text and args['status']: await message.click(int(args['btn2']) - 1)
|
||||
await asyncio.sleep(int(args['time']))
|
||||
if args['status'] and '🐮' in message.text: await self.client.send_message(self.moo, 'мус')
|
||||
except: pass
|
||||
|
||||
|
||||
# for more info: https://murix.ru/files/ftg
|
||||
# by xadjilut, 2021
|
||||
# Изменил для мубота @trololo_1
|
||||
|
||||
from .. import loader, utils
|
||||
import asyncio
|
||||
|
||||
@loader.tds
|
||||
class FarmMooBotMod(loader.Module):
|
||||
"""Для автоматического фарминга мубота.\n отправляет мус, кликает, затем мук, кликает. и всё по циклу."""
|
||||
strings = {
|
||||
'name': 'FarmMooBot',
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.name = self.strings['name']
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.client = client
|
||||
self.db = db
|
||||
self.moo = 1606812809
|
||||
if not self.db.get(self.name, "status", False):
|
||||
self.db.set(self.name, 'status', {'status': False, 'time': None, 'btn1': None, 'btn2': None})
|
||||
|
||||
async def mbfoncmd(self, message):
|
||||
"""Запустить автофарминг.\n.mbfon {интервал отправки} {первая кнопка} {вторая кнопка} | кнопки указывать по очередности."""
|
||||
args = utils.get_args_raw(message)
|
||||
if not args: return await utils.answer(message, 'Где аргументы?')
|
||||
args = args.split(' ')
|
||||
if not args[0].isdigit() or not args[1].isdigit() or not args[2].isdigit(): return await utils.answer(message, 'Один или более аргументов указан не корректно. Вводите только числовые значения!!')
|
||||
status = self.db.get(self.name, "status", False)
|
||||
if status['time']: return await utils.answer(message, 'Уже запущено.')
|
||||
self.db.set(self.name, "status", {'status': True, 'time': args[0], 'btn1': args[1], 'btn2': args[2]})
|
||||
await self.client.send_message(self.moo, 'мус')
|
||||
await utils.answer(message, 'Запущено.')
|
||||
|
||||
async def mbfoffcmd(self, message):
|
||||
"""Остановить автофармин."""
|
||||
self.db.set(self.name, 'status', {'status': False, 'time': None, 'btn1': None, 'btn2': None})
|
||||
await utils.answer(message, 'Остановлено.')
|
||||
|
||||
async def watcher(self, message):
|
||||
try:
|
||||
chat = utils.get_chat_id(message)
|
||||
if chat != self.moo: return
|
||||
args = self.db.get(self.name, 'status', False)
|
||||
if not args: return
|
||||
if not args['status'] or message.sender_id != self.moo or message.sticker: return
|
||||
try:
|
||||
if not '🐮' in message.text and '<strong>' in message.text and args['status']: await message.click(int(args['btn1']) - 1)
|
||||
await asyncio.sleep(3)
|
||||
if args['status'] and not '🐮' in message.text and '<strong>' in message.text: await self.client.send_message(self.moo, 'мук')
|
||||
except:
|
||||
if args['status']: await self.client.send_message(self.moo, 'мус')
|
||||
if not '🐮' in message.text and '<strong>' in message.text and args['status']: await message.click(int(args['btn1']) - 1)
|
||||
try:
|
||||
if '🐮' in message.text or args['status']: await message.click(int(args['btn2']) - 1)
|
||||
except:
|
||||
if args['status']: await self.client.send_message(self.moo, 'мук')
|
||||
if '🐮' in message.text and args['status']: await message.click(int(args['btn2']) - 1)
|
||||
await asyncio.sleep(int(args['time']))
|
||||
if args['status'] and '🐮' in message.text: await self.client.send_message(self.moo, 'мус')
|
||||
except: pass
|
||||
|
||||
|
||||
|
||||
@@ -1,91 +1,91 @@
|
||||
# meta developer: @trololo_1
|
||||
|
||||
from .. import loader, utils
|
||||
import subprocess
|
||||
try:
|
||||
from glitch_this import ImageGlitcher
|
||||
except:
|
||||
mod_inst = subprocess.Popen("pip install glitch-this", shell=True)
|
||||
mod_inst.wait()
|
||||
from glitch_this import ImageGlitcher
|
||||
|
||||
|
||||
class glitchMod(loader.Module):
|
||||
"Накладывает на изображения глитч эффект."
|
||||
strings = {"name":"glitchMod"}
|
||||
|
||||
async def client_ready(self, message, db):
|
||||
self.db=db
|
||||
if not self.db.get("glitch", "frames", False):
|
||||
self.db.set("glitch", "frames", 23)
|
||||
if not self.db.get("glitch", "step", False):
|
||||
self.db.set("glitch", "step", 1)
|
||||
if not self.db.get("glitch", "duration", False):
|
||||
self.db.set("glitch", "duration", 200)
|
||||
if not self.db.get("glitch", "loop", False):
|
||||
self.db.set("glitch", "loop", 0)
|
||||
|
||||
async def glitchcmd(self, message):
|
||||
"Используй: \n.glitch {аргументы} {реплай на фото} {уровень сдвига 0.0 - 10.0} \nЧтобы наложить эффект на фото.\nИспользуй: \n.glitch\nчтобы посмотреть аргументы."
|
||||
args = utils.get_args_raw(message)
|
||||
reply = await message.get_reply_message()
|
||||
glitcher = ImageGlitcher()
|
||||
args_glitch = ['-g', '-c', '-sl']
|
||||
FRAMES = self.db.get("glitch", "frames")
|
||||
STEP = self.db.get("glitch", "step")
|
||||
DURATION = self.db.get("glitch", "duration")
|
||||
LOOP =self.db.get("glitch", "loop")
|
||||
|
||||
gif_output = False
|
||||
color = False
|
||||
lines = False
|
||||
amount = 1.5
|
||||
if not reply and not args:
|
||||
message = await utils.answer(message, f'Аргументы:\n• <code>{args_glitch[0]}</code> --- возвращает изображение как гифку. \n• <code>{args_glitch[1]}</code> --- добавляет эффект смещения цвета. \n• <code>{args_glitch[2]}</code> --- добавляет эффект линий.')
|
||||
return
|
||||
if not reply.photo and not reply.sticker:
|
||||
message = await utils.answer(message, 'Реплай должен быть на фото.')
|
||||
return
|
||||
if args:
|
||||
args = [i for i in args.split(' ')]
|
||||
try:
|
||||
amount = float(args[-1])
|
||||
except ValueError:
|
||||
amount = 1.5
|
||||
gif_output = True if args_glitch[0] in args else False
|
||||
color = True if args_glitch[1] in args else False
|
||||
lines = True if args_glitch[2] in args else False
|
||||
file = reply.file.name if reply.file.name else "huita" + reply.file.ext
|
||||
await reply.download_media(file)
|
||||
b = glitcher.glitch_image(file, amount, color_offset = color, gif = gif_output, scan_lines = lines, step = STEP, frames = FRAMES)
|
||||
if gif_output:
|
||||
b[0].save('glitch_image.gif', format = 'GIF', append_images = b[1:], save_all = True, duration = DURATION, loop = LOOP )
|
||||
await message.client.send_file(message.to_id, 'glitch_image.gif')
|
||||
else:
|
||||
b.save('glitch_image.jpg')
|
||||
await message.client.send_file(message.to_id, 'glitch_image.jpg')
|
||||
await message.delete()
|
||||
|
||||
|
||||
async def glconfcmd(self, message):
|
||||
"Настройка глитч эффекта."
|
||||
args = utils.get_args_raw(message)
|
||||
glitch_opt = ["frames", "step", "duration", "loop"]
|
||||
if not args:
|
||||
message = await utils.answer(message, f"Доступные настройки:\n• <code>{glitch_opt[0]}</code> --- количество кадров.\n• <code>{glitch_opt[1]}</code> --- количество кадров без глюка(значение 1 ставит все кадры с глюком).\n• <code>{glitch_opt[2]}</code> --- длительность кадра(в миллисекундах).\n• <code>{glitch_opt[3]}</code> --- количество зацикливаний(значение 0 бесконечно зацикливает).\n\nИспользовать так:\noption = value")
|
||||
return
|
||||
args = [ i for i in args.split('=')]
|
||||
|
||||
for i in glitch_opt:
|
||||
if i == args[0].strip().lower():
|
||||
try:
|
||||
self.db.set("glitch", i, int(args[1]))
|
||||
except ValueError:
|
||||
message = await utils.answer(message, 'Значение было не числовым.')
|
||||
return
|
||||
message = await utils.answer(message, f'Опция <b>{i}</b> успешно установлена со значением <b>{args[1]}</b>')
|
||||
return
|
||||
message = await utils.answer(message, 'Нет совпадений опций или неправильное значение.')
|
||||
return
|
||||
|
||||
|
||||
# meta developer: @trololo_1
|
||||
|
||||
from .. import loader, utils
|
||||
import subprocess
|
||||
try:
|
||||
from glitch_this import ImageGlitcher
|
||||
except:
|
||||
mod_inst = subprocess.Popen("pip install glitch-this", shell=True)
|
||||
mod_inst.wait()
|
||||
from glitch_this import ImageGlitcher
|
||||
|
||||
|
||||
class glitchMod(loader.Module):
|
||||
"Накладывает на изображения глитч эффект."
|
||||
strings = {"name":"glitchMod"}
|
||||
|
||||
async def client_ready(self, message, db):
|
||||
self.db=db
|
||||
if not self.db.get("glitch", "frames", False):
|
||||
self.db.set("glitch", "frames", 23)
|
||||
if not self.db.get("glitch", "step", False):
|
||||
self.db.set("glitch", "step", 1)
|
||||
if not self.db.get("glitch", "duration", False):
|
||||
self.db.set("glitch", "duration", 200)
|
||||
if not self.db.get("glitch", "loop", False):
|
||||
self.db.set("glitch", "loop", 0)
|
||||
|
||||
async def glitchcmd(self, message):
|
||||
"Используй: \n.glitch {аргументы} {реплай на фото} {уровень сдвига 0.0 - 10.0} \nЧтобы наложить эффект на фото.\nИспользуй: \n.glitch\nчтобы посмотреть аргументы."
|
||||
args = utils.get_args_raw(message)
|
||||
reply = await message.get_reply_message()
|
||||
glitcher = ImageGlitcher()
|
||||
args_glitch = ['-g', '-c', '-sl']
|
||||
FRAMES = self.db.get("glitch", "frames")
|
||||
STEP = self.db.get("glitch", "step")
|
||||
DURATION = self.db.get("glitch", "duration")
|
||||
LOOP =self.db.get("glitch", "loop")
|
||||
|
||||
gif_output = False
|
||||
color = False
|
||||
lines = False
|
||||
amount = 1.5
|
||||
if not reply and not args:
|
||||
message = await utils.answer(message, f'Аргументы:\n• <code>{args_glitch[0]}</code> --- возвращает изображение как гифку. \n• <code>{args_glitch[1]}</code> --- добавляет эффект смещения цвета. \n• <code>{args_glitch[2]}</code> --- добавляет эффект линий.')
|
||||
return
|
||||
if not reply.photo and not reply.sticker:
|
||||
message = await utils.answer(message, 'Реплай должен быть на фото.')
|
||||
return
|
||||
if args:
|
||||
args = [i for i in args.split(' ')]
|
||||
try:
|
||||
amount = float(args[-1])
|
||||
except ValueError:
|
||||
amount = 1.5
|
||||
gif_output = True if args_glitch[0] in args else False
|
||||
color = True if args_glitch[1] in args else False
|
||||
lines = True if args_glitch[2] in args else False
|
||||
file = reply.file.name if reply.file.name else "huita" + reply.file.ext
|
||||
await reply.download_media(file)
|
||||
b = glitcher.glitch_image(file, amount, color_offset = color, gif = gif_output, scan_lines = lines, step = STEP, frames = FRAMES)
|
||||
if gif_output:
|
||||
b[0].save('glitch_image.gif', format = 'GIF', append_images = b[1:], save_all = True, duration = DURATION, loop = LOOP )
|
||||
await message.client.send_file(message.to_id, 'glitch_image.gif')
|
||||
else:
|
||||
b.save('glitch_image.jpg')
|
||||
await message.client.send_file(message.to_id, 'glitch_image.jpg')
|
||||
await message.delete()
|
||||
|
||||
|
||||
async def glconfcmd(self, message):
|
||||
"Настройка глитч эффекта."
|
||||
args = utils.get_args_raw(message)
|
||||
glitch_opt = ["frames", "step", "duration", "loop"]
|
||||
if not args:
|
||||
message = await utils.answer(message, f"Доступные настройки:\n• <code>{glitch_opt[0]}</code> --- количество кадров.\n• <code>{glitch_opt[1]}</code> --- количество кадров без глюка(значение 1 ставит все кадры с глюком).\n• <code>{glitch_opt[2]}</code> --- длительность кадра(в миллисекундах).\n• <code>{glitch_opt[3]}</code> --- количество зацикливаний(значение 0 бесконечно зацикливает).\n\nИспользовать так:\noption = value")
|
||||
return
|
||||
args = [ i for i in args.split('=')]
|
||||
|
||||
for i in glitch_opt:
|
||||
if i == args[0].strip().lower():
|
||||
try:
|
||||
self.db.set("glitch", i, int(args[1]))
|
||||
except ValueError:
|
||||
message = await utils.answer(message, 'Значение было не числовым.')
|
||||
return
|
||||
message = await utils.answer(message, f'Опция <b>{i}</b> успешно установлена со значением <b>{args[1]}</b>')
|
||||
return
|
||||
message = await utils.answer(message, 'Нет совпадений опций или неправильное значение.')
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -1,75 +1,75 @@
|
||||
# meta developer: @trololo_1
|
||||
# Github: trololo65
|
||||
import subprocess
|
||||
try:
|
||||
from translatepy import Translator
|
||||
except:
|
||||
mod_inst = subprocess.Popen("pip install --upgrade translatepy", shell=True)
|
||||
mod_inst.wait()
|
||||
from translatepy import Translator
|
||||
from translatepy.translators.google import GoogleTranslate
|
||||
from translatepy.translators.bing import BingTranslate
|
||||
from translatepy.translators.yandex import YandexTranslate
|
||||
from translatepy.translators.reverso import ReversoTranslate
|
||||
from translatepy.translators.deepl import DeeplTranslate
|
||||
from translatepy.translators.libre import LibreTranslate
|
||||
from translatepy.translators.translatecom import TranslateComTranslate
|
||||
from translatepy.translators.mymemory import MyMemoryTranslate
|
||||
from .. import loader, utils
|
||||
|
||||
@loader.tds
|
||||
class translatepyMod(loader.Module):
|
||||
"""Перевод текста. Автоматическое распознование языка."""
|
||||
strings = {'name': 'translatepy'}
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.db = db
|
||||
if not self.db.get('translatepy', 'services', False):
|
||||
self.db.set('translatepy', 'services', {'google': True, 'bing': False, 'yandex': False, 'reverso': False, 'libre': False, 'translatecom': False, 'deepl': False, 'mymemory': False,})
|
||||
|
||||
async def trnsltcmd(self, message):
|
||||
"""Используй: .trnslt {язык} {текст или реплай}"""
|
||||
|
||||
args = utils.get_args_raw(message)
|
||||
reply = await message.get_reply_message()
|
||||
args_list = args.split(' ', maxsplit = 1)
|
||||
sL = self.db.get('translatepy', 'services') #serviceList
|
||||
if not args:
|
||||
await utils.answer(message, 'Где аргументы?')
|
||||
return
|
||||
if not reply and len(args_list) <= 1 :
|
||||
await utils.answer(message, 'Нет реплая и текста для перевода.')
|
||||
return
|
||||
if len(args_list) == 1:
|
||||
text = reply.raw_text
|
||||
else:
|
||||
text = args_list[1]
|
||||
lng = args_list[0]
|
||||
sL_class = {'google': GoogleTranslate(), 'yandex': YandexTranslate(), 'bing': BingTranslate(), 'reverso': ReversoTranslate(), 'deepl': DeeplTranslate(), 'libre': LibreTranslate(), 'translatecom': TranslateComTranslate(), 'mymemory': MyMemoryTranslate()}
|
||||
try:
|
||||
sL_active = str(list(sL.keys())[list(sL.values()).index(True)]) # Поиск установленного сервера
|
||||
t = sL_class[sL_active]
|
||||
except:
|
||||
t = Translator()
|
||||
|
||||
res = t.translate(text,lng) # result translate
|
||||
|
||||
await utils.answer(message, f'<b>[{res.service}: {res.source_language} -> {lng}]</b>\n<code>{res.result}</code>')
|
||||
|
||||
async def tservicecmd(self, message):
|
||||
""" Установка сервиса для перевода.\nИспользуй .tservice list для просмотра всех сервисов"""
|
||||
args = utils.get_args_raw(message)
|
||||
sL = self.db.get('translatepy', 'services') #serviceList
|
||||
service = str(list(sL.keys())[list(sL.values()).index(True)]) # Поиск установленного сервера
|
||||
if not args:
|
||||
await utils.answer(message, '<b>Установка:</b> <code>.tservice {сервис}</code>'+f'\n<b>Сервис:</b> <code>{service}</code>')
|
||||
elif args == 'list':
|
||||
await utils.answer(message, '<b>Достуные сервисы:</b>\n<code>Google</code>\n<code>Bing</code>\n<code>Yandex</code>\n<code>Reverso</code>\n<code>Deepl</code>\n<code>Libre</code>\n<code>TranslateCom</code>\n<code>MyMemory</code>')
|
||||
elif args.lower() in sL:
|
||||
for key, value in sL.items(): # Переборка словаря
|
||||
sL[key] = False # Установка всех значений на False
|
||||
sL[args.lower()] = True # Установка нужного значения на True
|
||||
self.db.set('translatepy', 'services', sL)
|
||||
await utils.answer(message, f'Сервис <b>{args}</b> успешно установлен.')
|
||||
else:
|
||||
await utils.answer(message, f'Неверно введён сервис.')
|
||||
# meta developer: @trololo_1
|
||||
# Github: trololo65
|
||||
import subprocess
|
||||
try:
|
||||
from translatepy import Translator
|
||||
except:
|
||||
mod_inst = subprocess.Popen("pip install --upgrade translatepy", shell=True)
|
||||
mod_inst.wait()
|
||||
from translatepy import Translator
|
||||
from translatepy.translators.google import GoogleTranslate
|
||||
from translatepy.translators.bing import BingTranslate
|
||||
from translatepy.translators.yandex import YandexTranslate
|
||||
from translatepy.translators.reverso import ReversoTranslate
|
||||
from translatepy.translators.deepl import DeeplTranslate
|
||||
from translatepy.translators.libre import LibreTranslate
|
||||
from translatepy.translators.translatecom import TranslateComTranslate
|
||||
from translatepy.translators.mymemory import MyMemoryTranslate
|
||||
from .. import loader, utils
|
||||
|
||||
@loader.tds
|
||||
class translatepyMod(loader.Module):
|
||||
"""Перевод текста. Автоматическое распознование языка."""
|
||||
strings = {'name': 'translatepy'}
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.db = db
|
||||
if not self.db.get('translatepy', 'services', False):
|
||||
self.db.set('translatepy', 'services', {'google': True, 'bing': False, 'yandex': False, 'reverso': False, 'libre': False, 'translatecom': False, 'deepl': False, 'mymemory': False,})
|
||||
|
||||
async def trnsltcmd(self, message):
|
||||
"""Используй: .trnslt {язык} {текст или реплай}"""
|
||||
|
||||
args = utils.get_args_raw(message)
|
||||
reply = await message.get_reply_message()
|
||||
args_list = args.split(' ', maxsplit = 1)
|
||||
sL = self.db.get('translatepy', 'services') #serviceList
|
||||
if not args:
|
||||
await utils.answer(message, 'Где аргументы?')
|
||||
return
|
||||
if not reply and len(args_list) <= 1 :
|
||||
await utils.answer(message, 'Нет реплая и текста для перевода.')
|
||||
return
|
||||
if len(args_list) == 1:
|
||||
text = reply.raw_text
|
||||
else:
|
||||
text = args_list[1]
|
||||
lng = args_list[0]
|
||||
sL_class = {'google': GoogleTranslate(), 'yandex': YandexTranslate(), 'bing': BingTranslate(), 'reverso': ReversoTranslate(), 'deepl': DeeplTranslate(), 'libre': LibreTranslate(), 'translatecom': TranslateComTranslate(), 'mymemory': MyMemoryTranslate()}
|
||||
try:
|
||||
sL_active = str(list(sL.keys())[list(sL.values()).index(True)]) # Поиск установленного сервера
|
||||
t = sL_class[sL_active]
|
||||
except:
|
||||
t = Translator()
|
||||
|
||||
res = t.translate(text,lng) # result translate
|
||||
|
||||
await utils.answer(message, f'<b>[{res.service}: {res.source_language} -> {lng}]</b>\n<code>{res.result}</code>')
|
||||
|
||||
async def tservicecmd(self, message):
|
||||
""" Установка сервиса для перевода.\nИспользуй .tservice list для просмотра всех сервисов"""
|
||||
args = utils.get_args_raw(message)
|
||||
sL = self.db.get('translatepy', 'services') #serviceList
|
||||
service = str(list(sL.keys())[list(sL.values()).index(True)]) # Поиск установленного сервера
|
||||
if not args:
|
||||
await utils.answer(message, '<b>Установка:</b> <code>.tservice {сервис}</code>'+f'\n<b>Сервис:</b> <code>{service}</code>')
|
||||
elif args == 'list':
|
||||
await utils.answer(message, '<b>Достуные сервисы:</b>\n<code>Google</code>\n<code>Bing</code>\n<code>Yandex</code>\n<code>Reverso</code>\n<code>Deepl</code>\n<code>Libre</code>\n<code>TranslateCom</code>\n<code>MyMemory</code>')
|
||||
elif args.lower() in sL:
|
||||
for key, value in sL.items(): # Переборка словаря
|
||||
sL[key] = False # Установка всех значений на False
|
||||
sL[args.lower()] = True # Установка нужного значения на True
|
||||
self.db.set('translatepy', 'services', sL)
|
||||
await utils.answer(message, f'Сервис <b>{args}</b> успешно установлен.')
|
||||
else:
|
||||
await utils.answer(message, f'Неверно введён сервис.')
|
||||
|
||||
@@ -1,83 +1,83 @@
|
||||
# meta developer: @trololo_1
|
||||
|
||||
from telethon import events
|
||||
from .. import utils, loader
|
||||
import re, asyncio, os
|
||||
|
||||
chat = "@TTFullBot"
|
||||
|
||||
class TTsaveMod(loader.Module):
|
||||
"""Save tiktok video"""
|
||||
strings = {'name': 'TTsaveMod'}
|
||||
async def client_ready(self, client, db):
|
||||
self.db = db
|
||||
|
||||
async def ttsavecmd(self, message):
|
||||
""".ttsave {link}"""
|
||||
|
||||
args = utils.get_args_raw(message)
|
||||
async with message.client.conversation(chat) as conv:
|
||||
await utils.answer(message, 'Скачиваю...')
|
||||
response1, response2, response3 = [conv.wait_event(events.NewMessage(incoming=True, from_users=chat, chats=chat)) for i in range(3)]
|
||||
bot_send_link = await message.client.send_message(chat, args)
|
||||
response1 = await response1
|
||||
response2 = await response2
|
||||
response3 = await response3
|
||||
await response2.download_media("hui.mp4")
|
||||
await message.client.send_file(message.to_id, "hui.mp4")
|
||||
await response1.delete()
|
||||
await response2.delete()
|
||||
await response3.delete()
|
||||
await bot_send_link.delete()
|
||||
await message.delete()
|
||||
os.remove("hui.mp4")
|
||||
|
||||
async def ttacceptcmd(self, message):
|
||||
""" .ttaccept {reply/id} для открытия в чате автоматического скачивания ссылок. без аргументов тоже работает.\n.ttaccept -l для показа открытых чатов """
|
||||
|
||||
args = utils.get_args_raw(message)
|
||||
reply = await message.get_reply_message()
|
||||
users_list = self.db.get('TTsaveMod', 'users', [])
|
||||
|
||||
if args == '-l':
|
||||
if len(users_list) == 0: return await utils.answer(message, 'Список пуст.')
|
||||
return await utils.answer(message, '• '+'\n• '.join(['<code>'+str(i)+'</code>' for i in users_list]))
|
||||
|
||||
try:
|
||||
if not args and not reply:
|
||||
user = message.chat_id
|
||||
else:
|
||||
user = reply.sender_id if not args else int(args)
|
||||
except:
|
||||
return await utils.answer(message, 'Неверно введён ид.')
|
||||
if user in users_list:
|
||||
users_list.remove(user)
|
||||
await utils.answer(message, f'Ид <code>{str(user)}</code> исключен.')
|
||||
else:
|
||||
users_list.append(user)
|
||||
await utils.answer(message, f'Ид <code>{str(user)}</code> добавлен.')
|
||||
await self.db.set('TTsaveMod', 'users', users_list)
|
||||
|
||||
async def watcher(self, message):
|
||||
try:
|
||||
users = self.db.get('TTsaveMod', 'users', [])
|
||||
if message.chat_id not in users: return
|
||||
links = re.findall(r'((?:https?://)?vm\.tiktok\.com/[A-Za-z0-9_]+/?)', message.raw_text)
|
||||
if len(links) == 0: return
|
||||
|
||||
async with message.client.conversation(chat) as conv:
|
||||
for link in links:
|
||||
response1, response2, response3 = [conv.wait_event(events.NewMessage(incoming=True, from_users=chat, chats=chat)) for i in range(3)]
|
||||
bot_send_link = await message.client.send_message(chat, link)
|
||||
response1 = await response1
|
||||
response2 = await response2
|
||||
response3 = await response3
|
||||
await response2.download_media("hui.mp4")
|
||||
await message.client.send_file(message.chat_id, "hui.mp4")
|
||||
await response1.delete()
|
||||
await response2.delete()
|
||||
await response3.delete()
|
||||
await bot_send_link.delete()
|
||||
os.remove("hui.mp4")
|
||||
await asyncio.sleep(5)
|
||||
except: pass
|
||||
# meta developer: @trololo_1
|
||||
|
||||
from telethon import events
|
||||
from .. import utils, loader
|
||||
import re, asyncio, os
|
||||
|
||||
chat = "@TTFullBot"
|
||||
|
||||
class TTsaveMod(loader.Module):
|
||||
"""Save tiktok video"""
|
||||
strings = {'name': 'TTsaveMod'}
|
||||
async def client_ready(self, client, db):
|
||||
self.db = db
|
||||
|
||||
async def ttsavecmd(self, message):
|
||||
""".ttsave {link}"""
|
||||
|
||||
args = utils.get_args_raw(message)
|
||||
async with message.client.conversation(chat) as conv:
|
||||
await utils.answer(message, 'Скачиваю...')
|
||||
response1, response2, response3 = [conv.wait_event(events.NewMessage(incoming=True, from_users=chat, chats=chat)) for i in range(3)]
|
||||
bot_send_link = await message.client.send_message(chat, args)
|
||||
response1 = await response1
|
||||
response2 = await response2
|
||||
response3 = await response3
|
||||
await response2.download_media("hui.mp4")
|
||||
await message.client.send_file(message.to_id, "hui.mp4")
|
||||
await response1.delete()
|
||||
await response2.delete()
|
||||
await response3.delete()
|
||||
await bot_send_link.delete()
|
||||
await message.delete()
|
||||
os.remove("hui.mp4")
|
||||
|
||||
async def ttacceptcmd(self, message):
|
||||
""" .ttaccept {reply/id} для открытия в чате автоматического скачивания ссылок. без аргументов тоже работает.\n.ttaccept -l для показа открытых чатов """
|
||||
|
||||
args = utils.get_args_raw(message)
|
||||
reply = await message.get_reply_message()
|
||||
users_list = self.db.get('TTsaveMod', 'users', [])
|
||||
|
||||
if args == '-l':
|
||||
if len(users_list) == 0: return await utils.answer(message, 'Список пуст.')
|
||||
return await utils.answer(message, '• '+'\n• '.join(['<code>'+str(i)+'</code>' for i in users_list]))
|
||||
|
||||
try:
|
||||
if not args and not reply:
|
||||
user = message.chat_id
|
||||
else:
|
||||
user = reply.sender_id if not args else int(args)
|
||||
except:
|
||||
return await utils.answer(message, 'Неверно введён ид.')
|
||||
if user in users_list:
|
||||
users_list.remove(user)
|
||||
await utils.answer(message, f'Ид <code>{str(user)}</code> исключен.')
|
||||
else:
|
||||
users_list.append(user)
|
||||
await utils.answer(message, f'Ид <code>{str(user)}</code> добавлен.')
|
||||
await self.db.set('TTsaveMod', 'users', users_list)
|
||||
|
||||
async def watcher(self, message):
|
||||
try:
|
||||
users = self.db.get('TTsaveMod', 'users', [])
|
||||
if message.chat_id not in users: return
|
||||
links = re.findall(r'((?:https?://)?vm\.tiktok\.com/[A-Za-z0-9_]+/?)', message.raw_text)
|
||||
if len(links) == 0: return
|
||||
|
||||
async with message.client.conversation(chat) as conv:
|
||||
for link in links:
|
||||
response1, response2, response3 = [conv.wait_event(events.NewMessage(incoming=True, from_users=chat, chats=chat)) for i in range(3)]
|
||||
bot_send_link = await message.client.send_message(chat, link)
|
||||
response1 = await response1
|
||||
response2 = await response2
|
||||
response3 = await response3
|
||||
await response2.download_media("hui.mp4")
|
||||
await message.client.send_file(message.chat_id, "hui.mp4")
|
||||
await response1.delete()
|
||||
await response2.delete()
|
||||
await response3.delete()
|
||||
await bot_send_link.delete()
|
||||
os.remove("hui.mp4")
|
||||
await asyncio.sleep(5)
|
||||
except: pass
|
||||
|
||||
Reference in New Issue
Block a user