mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-16 14:34:17 +02:00
Commited backup
This commit is contained in:
42
trololo65/Modules/BFGMod.py
Normal file
42
trololo65/Modules/BFGMod.py
Normal file
@@ -0,0 +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>')
|
||||
21
trololo65/Modules/Licence
Normal file
21
trololo65/Modules/Licence
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2022 trololo65
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
32
trololo65/Modules/LsSend.py
Normal file
32
trololo65/Modules/LsSend.py
Normal file
@@ -0,0 +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>')
|
||||
|
||||
60
trololo65/Modules/Morze.py
Normal file
60
trololo65/Modules/Morze.py
Normal file
@@ -0,0 +1,60 @@
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
from .. import loader, utils
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@loader.tds
|
||||
class MorzeMod(loader.Module):
|
||||
"""Конвертация текста в шифр Морзе и наоборот.
|
||||
|
||||
Символы использовать не советую, могут возникать ошибки!!"""
|
||||
strings = {
|
||||
"name": "Morze"
|
||||
}
|
||||
|
||||
|
||||
|
||||
@loader.unrestricted
|
||||
async def tomrzcmd(self, message):
|
||||
""".tomrz [реплай или текст]"""
|
||||
de = {'А': '•- ', 'Б': '-••• ', 'В': '•-- ', 'Г': '--• ', 'Д': '-•• ', 'Е': '• ', 'Ё': '• ', 'Ж': '•••- ', 'З': '--•• ', 'И': '•• ', 'Й': '•--- ', 'К': '-•- ', 'Л': '•-•• ', 'М': '-- ', 'Н': '-• ', 'О': '--- ', 'П': '•--• ', 'Р': '•-• ', 'С': '••• ', 'Т': '- ', 'У': '••- ', 'Ф': '••-• ', 'Х': '•••• ', 'Ц': '-•-• ', 'Ч': '---• ', 'Ш': '---- ', 'Щ': '--•- ', 'Ъ': '--•-- ', 'Ы': '-•-- ', 'Ь': '-••- ', 'Э': '••-•• ', 'Ю': '••-- ', 'Я': '•-•- ' ,'1': '•---- ','2':'••--- ','3':'•••-- ','4':'••••- ','5':'••••• ','6':'-•••• ','7':'--••• ','8':'---•• ','9':'----• ','0':'----- ','.':'•••••• ',',':'•-•-•- ',';':'-•-•-• ',':':'---••• ','?':'••--•• ','!':'--••-- ','-':'-••••- ','(':'-•--• ', ')':'-•--•- ', '/':'-••-• ' ,'"':'•-••-• ','+':'•-•-• ', '_':'••--•- ', '$':'•••-••- ', '@':'•--•-• ', '=':'-•••- ', '&':'•-••• ', }
|
||||
|
||||
|
||||
reply = await message.get_reply_message()
|
||||
text = utils.get_args_raw(message)
|
||||
|
||||
if reply and not text:
|
||||
text = reply.raw_text
|
||||
if not text:
|
||||
return await utils.answer(message, "<code>Вы не ввели текст или не сделали реплай.</code>")
|
||||
x = ''
|
||||
for word in text.split():
|
||||
|
||||
for letter in word.upper():
|
||||
x += de[letter]
|
||||
x+=' '
|
||||
await message.edit(x)
|
||||
|
||||
@loader.unrestricted
|
||||
async def toabccmd(self, message):
|
||||
""".toabc [реплай или текст]"""
|
||||
|
||||
en = {'•-': 'А', '-•••': 'Б', '•--': 'В', '--•': 'Г', '-••': 'Д', '•': 'Е', '•••-': 'Ж', '--••': 'З', '••': 'И', '•---': 'Й', '-•-': 'К', '•-••': 'Л', '--': 'М', '-•': 'Н', '---': 'О', '•--•': 'П', '•-•': 'Р', '•••': 'С', '-': 'Т', '••-': 'У', '••-•': 'Ф', '••••': 'Х', '-•-•': 'Ц', '---•': 'Ч', '----': 'Ш', '--•-': 'Щ', '--•--': 'Ъ', '-•--': 'Ы', '-••-': 'Ь', '••-••': 'Э', '••--': 'Ю', '•-•-': 'Я' ,'•----': '1', '••---': '2', '•••--': '3', '••••-': '4', '•••••': '5', '-••••': '6', '--•••': '7', '---••': '8', '----•': '9', '-----': '0', '••••••': '.', '•-•-•-': ',', '-•-•-•': ';', '---•••': ':', '••--••': '?', '--••--': '!', '-••••-': '-', '-•--•-': ')', '-•--•':'(', '-••-•': '/', '•-••-•': '"', '•-•-•': '+', '••--•-': '_', '•••-••-':'$', '•--•-•':'@', '-•••-':'=', '•-•••':'&' }
|
||||
|
||||
reply = await message.get_reply_message()
|
||||
text = utils.get_args_raw(message)
|
||||
|
||||
if reply and not text:
|
||||
text = reply.raw_text
|
||||
if not text:
|
||||
return await utils.answer(message, "<code>Вы не ввели текст или не сделали реплай.</code>")
|
||||
x = ''
|
||||
for word in text.split(' '):
|
||||
|
||||
for letter in word.split():
|
||||
x += en[letter].lower()
|
||||
x+=' '
|
||||
await message.edit(x)
|
||||
277
trololo65/Modules/Num.py
Normal file
277
trololo65/Modules/Num.py
Normal file
@@ -0,0 +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('.лаб')
|
||||
|
||||
1
trololo65/Modules/README.md
Normal file
1
trololo65/Modules/README.md
Normal file
@@ -0,0 +1 @@
|
||||
# Modules for Friendly-telegram userbot
|
||||
501
trololo65/Modules/RPMod.py
Normal file
501
trololo65/Modules/RPMod.py
Normal file
@@ -0,0 +1,501 @@
|
||||
# meta developer: @trololo_1
|
||||
# MIT License
|
||||
|
||||
# Copyright (c) 2022 trololo65
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
|
||||
import subprocess
|
||||
try:
|
||||
import emoji # max work version 1.7.0
|
||||
except:
|
||||
mod_inst = subprocess.Popen("pip install emoji==1.7.0", shell=True)
|
||||
mod_inst.wait()
|
||||
import emoji
|
||||
from .. import loader, utils
|
||||
import string, pickle, re
|
||||
from telethon.tl.types import Channel
|
||||
|
||||
conf_default = {
|
||||
'-s1':{ # СТИЛИ для действия
|
||||
'1': [False, '<b>жирный</b>', '<b>', '</b>'],
|
||||
'2': [False, '<i>курсив</i>', '<i>', '</i>'],
|
||||
'3': [False, '<u>подчеркнутый</u>', '<u>', '</u>'],
|
||||
'4': [False, '<s>зачёркнутый</s>', '<s>', '</s>'],
|
||||
'5': [False, '<tg-spoiler>скрытый</tg-spoiler>', '<tg-spoiler>', '</tg-spoiler>'],
|
||||
},
|
||||
'-s2':{ # СТИЛИ для "С репликой"
|
||||
'1': [True, '<b>жирный</b>', '<b>', '</b>'],
|
||||
'2': [False, '<i>курсив</i>', '<i>', '</i>'],
|
||||
'3': [False, '<u>подчеркнутый</u>', '<u>', '</u>'],
|
||||
'4': [False, '<s>зачёркнуто</s>', '<s>', '</s>'],
|
||||
'5': [False, '<tg-spoiler>скрытый</tg-spoiler>', '<tg-spoiler>', '</tg-spoiler>'],
|
||||
},
|
||||
'-s3':{ # СТИЛИ для реплики
|
||||
'1': [False, '<b>жирный</b>', '<b>', '</b>'],
|
||||
'2': [False, '<i>курсив</i>', '<i>', '</i>'],
|
||||
'3': [False, '<u>подчеркнутый</u>', '<u>', '</u>'],
|
||||
'4': [False, '<s>зачёркнутый</s>', '<s>', '</s>'],
|
||||
'5': [False, '<tg-spoiler>скрытый</tg-spoiler>', '<tg-spoiler>', '</tg-spoiler>'],
|
||||
},
|
||||
'-sE':{ # ЭМОДЗИ перед репликой
|
||||
'1': [True, '💬'],
|
||||
'2': [False, '💭'],
|
||||
'3': [False, '🗯'],
|
||||
'4': [False, '✉️'],
|
||||
'5': [False, '🔊'],
|
||||
'6': [False, '🏳️🌈']
|
||||
},
|
||||
'-sS':{ # РАЗРЫВ строки в реплике
|
||||
'1': [True, 'пробел', ' '],
|
||||
'2': [False, 'разрыв строки', '\n'],
|
||||
'3': [False, 'точка + пробел', '. '],
|
||||
'4': [False, 'запятая + пробел', ', ']}
|
||||
}
|
||||
@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):
|
||||
self.db.set("RPMod", "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', 'rpnicks', False):
|
||||
self.db.set('RPMod', 'rpnicks', {})
|
||||
if not self.db.get('RPMod', 'rpcomands', False):
|
||||
comands = {'чмок': 'чмокнул', 'лизь': 'лизнул', 'кусь': 'кусьнул', 'поцеловать': 'поцеловал', 'выебать': 'выебал', 'трахнуть': 'трахнул', 'выпороть': 'выпорол', 'шлепнуть': 'шлепнул', 'отлизать': 'отлизал у', 'прижать': 'прижал', 'погладить': 'погладил', 'да.': 'пизда', 'где.': 'в пизде', 'нет.': 'пидора ответ', 'бывает.': 'ну это пиздец конечно на самом деле', 'обнять': 'обнял'}
|
||||
self.db.set('RPMod', 'rpcomands', comands)
|
||||
if not self.db.get('RPMod', 'rpemoji', False):
|
||||
self.db.set('RPMod', 'rpemoji', {'лизь': '👅'})
|
||||
if not self.db.get('RPMod', 'useraccept', False):
|
||||
self.db.set('RPMod', 'useraccept', {"chats": [], "users": []})
|
||||
elif type(self.db.get('RPMod', 'useraccept')) == type([]):
|
||||
self.db.set('RPMod', 'useraccept', {"chats": [], "users": self.db.get('RPMod', 'useraccept')})
|
||||
if self.db.get("RPMod", "rpconfigurate", False): # ДЛЯ разных версий модуля.
|
||||
self.db.set("RPMod", "rpconfigurate", self.merge_dict(conf_default, self.db.get("RPMod", "rpconfigurate")))
|
||||
|
||||
async def dobrpcmd(self, message):
|
||||
"""Используй: .dobrp (команда) / (действие) / (эмодзи) чтобы добавить команду. Можно и без эмодзи."""
|
||||
args = utils.get_args_raw(message)
|
||||
dict_rp = self.db.get('RPMod', 'rpcomands')
|
||||
|
||||
try:
|
||||
key_rp = str(args.split('/')[0]).strip()
|
||||
value_rp = str(args.split('/', maxsplit=2)[1]).strip()
|
||||
lenght_args = args.split('/')
|
||||
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')
|
||||
|
||||
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 utils.answer(message, f"<b>Были введены не только эмодзи(пробел тоже символ). </b>")
|
||||
return
|
||||
if len(lst) > 3:
|
||||
await utils.answer(message, f"<b>Было введено более 3 эмодзи.</b>")
|
||||
return
|
||||
elif not emoji_rp or not emoji_rp.strip():
|
||||
await utils.answer(message, f"<b>Разделитель для эмодзи есть, а их нет? хм.</b>")
|
||||
return
|
||||
|
||||
|
||||
key_len = [len(x) for x in key_rp.split()]
|
||||
|
||||
if len(dict_rp) >= 70:
|
||||
await utils.answer(message, '<b>Достигнут лимит рп команд.</b>')
|
||||
elif not key_rp or not key_rp.strip():
|
||||
await utils.answer(message, '<b>Вы не ввели название рп команды.</b>')
|
||||
elif not value_rp or not value_rp.strip():
|
||||
await utils.answer(message, '<b>Вы не ввели действие для рп команды.</b>')
|
||||
elif int(len(key_len)) > 1:
|
||||
await utils.answer(message, '<b>В качестве рп команды было введено больше одного слова.</b>')
|
||||
elif key_rp == 'all':
|
||||
await utils.answer(message, '<b>Использовать \'<code>all</code>\' в качестве названия команды запрещено!</b>')
|
||||
elif count_emoji == 1:
|
||||
dict_emoji_rp[key_rp] = emoji_rp
|
||||
dict_rp[key_rp]= value_rp
|
||||
self.db.set('RPMod', 'rpcomands', dict_rp)
|
||||
self.db.set('RPMod', 'rpemoji', dict_emoji_rp)
|
||||
await utils.answer(message, f'<b>Команда \'<code>{key_rp}</code>\' успешно добавлена с эмодзи \'{emoji_rp}\'!</b>')
|
||||
else:
|
||||
dict_rp[key_rp]= value_rp
|
||||
self.db.set('RPMod', 'rpcomands', dict_rp)
|
||||
await utils.answer(message, f'<b>Команда \'<code>{key_rp}</code>\' успешно добавлена!</b>')
|
||||
except:
|
||||
await utils.answer(message, '<b>Вы не ввели разделитель /, либо вовсе ничего не ввели.</b>')
|
||||
|
||||
async def delrpcmd(self, message):
|
||||
"""Используй: .delrp (команда) чтобы удалить команду.\n Используй: .delrp all чтобы удалить все команды."""
|
||||
args = utils.get_args_raw(message)
|
||||
dict_rp = self.db.get('RPMod', 'rpcomands')
|
||||
dict_emoji_rp = self.db.get('RPMod', 'rpemoji')
|
||||
key_rp = str(args)
|
||||
count = 0
|
||||
if key_rp == 'all':
|
||||
dict_rp.clear()
|
||||
dict_emoji_rp.clear()
|
||||
self.db.set('RPMod', 'rpcomands', dict_rp)
|
||||
self.db.set('RPMod', 'rpemoji', dict_emoji_rp)
|
||||
await utils.answer(message, '<b>Список рп команд очищен.</b>')
|
||||
return
|
||||
elif not key_rp or not key_rp.strip():
|
||||
await utils.answer(message, '<b>Вы не ввели команду.</b>')
|
||||
else:
|
||||
try:
|
||||
if key_rp in dict_emoji_rp:
|
||||
dict_rp.pop(key_rp)
|
||||
dict_emoji_rp.pop(key_rp)
|
||||
self.db.set('RPMod', 'rpcomands', dict_rp)
|
||||
self.db.set('RPMod', 'rpemoji', dict_emoji_rp)
|
||||
else:
|
||||
dict_rp.pop(key_rp)
|
||||
self.db.set('RPMod', 'rpcomands', dict_rp)
|
||||
await utils.answer(message, f'<b>Команда \'<code>{key_rp}</code>\' успешно удалена!</b>')
|
||||
except KeyError:
|
||||
await utils.answer(message, '<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 utils.answer(message, "<b>RP Режим <code>выключен</code></b>")
|
||||
else:
|
||||
self.db.set("RPMod", "status", 1)
|
||||
await utils.answer(message, "<b>RP Режим <code>включен</code></b>")
|
||||
elif args.strip() == 'toggle':
|
||||
if rezjim == 1:
|
||||
self.db.set("RPMod", "rprezjim", 2)
|
||||
await utils.answer(message, "<b>RP Режим изменён на <code>отправку смс.</code></b>")
|
||||
else:
|
||||
self.db.set("RPMod", "rprezjim", 1)
|
||||
await utils.answer(message, "<b>RP Режим изменён на <code>изменение смс.</code></b>")
|
||||
else:
|
||||
await utils.answer(message, 'Что то не так.. ')
|
||||
|
||||
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 utils.answer(message, '<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 utils.answer(message, listComands)
|
||||
|
||||
async def rpnickcmd(self, message):
|
||||
"""Используй: .rpnick (ник) чтобы сменить ник пользователю или себе. С аргументом -l вызовет все ники."""
|
||||
args = utils.get_args_raw(message).strip()
|
||||
reply = await message.get_reply_message()
|
||||
nicks = self.db.get('RPMod', 'rpnicks')
|
||||
if args == '-l':
|
||||
str_nicks = '• ' + '\n •'.join(' --- '.join([f'<code>{user_id}</code>', f'<b>{nick}</b>']) for user_id, nick in nicks.items())
|
||||
return await utils.answer(message, str_nicks)
|
||||
|
||||
if not reply:
|
||||
user = await message.client.get_entity(message.sender_id)
|
||||
else:
|
||||
user = await message.client.get_entity(reply.sender_id)
|
||||
if not args:
|
||||
if str(user.id) in nicks: nicks.pop(str(user.id))
|
||||
self.db.set('RPMod', 'rpnicks', nicks)
|
||||
return await utils.answer(message, f"Ник пользователя <b>{str(user.id)}</b> изменён на '<b>{user.first_name}</b>'")
|
||||
lst = []
|
||||
nick = ''
|
||||
for x in args:
|
||||
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 utils.answer(message, f"Ник пользователя <b>{str(user.id)}</b> изменён на '<b>{args}</b>'")
|
||||
elif len(lst) + len(nick) >= 45:
|
||||
await utils.answer(message, f"<b>Ник превышает лимит в 45 символов(возможно эмодзи имеют длину более 1 символа).</b>")
|
||||
else:
|
||||
nicks[str(user.id)] = args
|
||||
self.db.set('RPMod', 'rpnicks', nicks)
|
||||
await utils.answer(message, f"Ник пользователя <b>{str(user.id)}</b> изменён на '<b>{args}</b>'")
|
||||
|
||||
async def rpbackcmd(self, message):
|
||||
"""Бекап рп команд.\n .rpback для просмотра аргументов. """
|
||||
args = utils.get_args_raw(message).strip()
|
||||
comands = self.db.get('RPMod', 'rpcomands')
|
||||
emojies = self.db.get('RPMod', 'rpemoji')
|
||||
file_name = 'RPModBackUp.pickle'
|
||||
id = message.to_id
|
||||
reply = await message.get_reply_message()
|
||||
if not args:
|
||||
await utils.answer(message, '<b>Аргументы:</b>\n<code>-b</code> <b>-- сделать бекап.</b>\n<code>-r</code> <b>загрузить бекап.(используй с реплаем на файл)</b>')
|
||||
if args == '-b':
|
||||
try:
|
||||
await message.delete()
|
||||
dict_all = { 'rp': comands, 'emj': emojies}
|
||||
with open(file_name, 'wb') as f:
|
||||
pickle.dump(dict_all, f)
|
||||
await message.client.send_file(id, file_name)
|
||||
except Exception as e:
|
||||
await utils.answer(message, f"<b>Ошибка:\n</b>{e}")
|
||||
elif args == '-r' and reply:
|
||||
try:
|
||||
if not reply.document:
|
||||
await utils.answer(message, f"<b>Это не файл.</b>")
|
||||
await reply.download_media(file_name)
|
||||
with open(file_name, 'rb') as f:
|
||||
data = pickle.load(f)
|
||||
rp = data['rp']
|
||||
emj = data['emj']
|
||||
result_rp = dict(comands, **rp)
|
||||
result_emj = dict(emojies, **emj)
|
||||
self.db.set('RPMod', 'rpcomands', result_rp)
|
||||
self.db.set('RPMod', 'rpemoji', result_emj)
|
||||
await utils.answer(message, f"<b>Команды обновлены!</b>")
|
||||
except Exception as e:
|
||||
await utils.answer(message, f"<b>Ошибка:\n</b>{e}")
|
||||
|
||||
async def rpblockcmd(self, message):
|
||||
"""Используй: .rpblock чтобы добавить/удалить исключение(использовать в нужном чате).\nИспользуй: .rpblock list чтобы просмотреть чаты в исключениях.\nИспользуй .rpblock (ид) чтобы удалить чат из исключений."""
|
||||
args = utils.get_args_raw(message)
|
||||
ex = self.db.get("RPMod", "exlist")
|
||||
if not args:
|
||||
a = await message.client.get_entity(message.to_id)
|
||||
if a.id in ex:
|
||||
ex.remove(a.id)
|
||||
self.db.set("RPMod", "exlist", ex)
|
||||
try:
|
||||
name = a.title
|
||||
except:
|
||||
name = a.first_name
|
||||
await utils.answer(message, f'<i>Чат <b><u>{name}</u></b>[<code>{a.id}</code>] удален из исключений.</i>')
|
||||
else:
|
||||
ex.append(a.id)
|
||||
self.db.set("RPMod", "exlist", ex)
|
||||
try:
|
||||
name = a.title
|
||||
except:
|
||||
name = a.first_name
|
||||
await utils.answer(message, f'<i>Чат <b><u>{name}</u></b>[<code>{a.id}</code>] добавлен в исключения.</i>')
|
||||
elif args.isdigit():
|
||||
args = int(args)
|
||||
if args in ex:
|
||||
ex.remove(args)
|
||||
self.db.set("RPMod", "exlist", ex)
|
||||
a = await message.client.get_entity(args)
|
||||
try:
|
||||
name = a.title
|
||||
except:
|
||||
name = a.first_name
|
||||
await utils.answer(message, f'<i>Чат <b><u>{name}</u></b>(<code>{args}</code>) удален из исключений.</i>')
|
||||
else:
|
||||
try:
|
||||
a = await message.client.get_entity(args)
|
||||
except:
|
||||
await utils.answer(message, '<b>Неверный ид.</b>')
|
||||
ex.append(args)
|
||||
self.db.set("RPMod", "exlist", ex)
|
||||
try:
|
||||
name = a.title
|
||||
except:
|
||||
name = a.first_name
|
||||
await utils.answer(message, f'<i>Чат <b><u>{name}</u></b>[<code>{a.id}</code>] добавлен в исключения.</i>')
|
||||
elif args == 'list':
|
||||
ex_len = len(ex)
|
||||
if ex_len == 0:
|
||||
await utils.answer(message, f'<b>Список исключений пуст.</b>')
|
||||
return
|
||||
sms = f'<i> Чаты, которые есть в исключениях({ex_len}):</i>'
|
||||
for i in ex:
|
||||
try:
|
||||
a = await message.client.get_entity(i)
|
||||
except:
|
||||
await utils.answer(message, f'<b>Неверный ид -- {a}</b>')
|
||||
return
|
||||
try:
|
||||
name = a.title
|
||||
except:
|
||||
name = a.first_name
|
||||
sms+=f'\n• <b><u>{name}</u> --- </b><code>{i}</code>'
|
||||
await utils.answer(message, sms)
|
||||
else:
|
||||
await utils.answer(message, 'Что то пошло не так..')
|
||||
|
||||
async def useracceptcmd(self, message):
|
||||
""" Добавление/удаление пользователей/чатов, разрешенным использовать ваши команды.\n .useraccept {id/reply}\nДля добавления чата используй без реплая и аргументов."""
|
||||
reply = await message.get_reply_message()
|
||||
args = utils.get_args_raw(message)
|
||||
userA = self.db.get('RPMod', 'useraccept')
|
||||
if not reply and not args and message.is_group:
|
||||
chat = message.chat
|
||||
if chat.id not in userA["chats"]:
|
||||
userA["chats"].append(chat.id)
|
||||
return await utils.answer(message, f'<i>Чату <b><u>{chat.title}</u></b>[<code>{chat.id}</code>] открыт доступ.</i>')
|
||||
else:
|
||||
userA["chats"].remove(chat.id)
|
||||
return await utils.answer(message, f'<i>Чату <b><u>{chat.title}</u></b>[<code>{chat.id}</code>] закрыт доступ.</i>')
|
||||
elif args == '-l':
|
||||
sms = '<b>Пользователи, у которых есть доступ к командам:</b>'
|
||||
for k, v in userA.items():
|
||||
if k == 'chats':
|
||||
sms+= f'\n<b>Чатов:</b>'
|
||||
else:
|
||||
sms+= f'\n<b>Пользователей:</b>'
|
||||
for i in v:
|
||||
try:
|
||||
user = (await message.client.get_entity(int(i))).title if k == 'chats' else (await message.client.get_entity(int(i))).first_name
|
||||
sms+= f'\n<b>• <u>{user}</u> ---</b> <code>{i}</code>'
|
||||
except:
|
||||
sms+= f'\n<b>•</b> <code>{i}</code>'
|
||||
await utils.answer(message, sms)
|
||||
elif args or reply:
|
||||
args = int(args) if args.isdigit() else reply.sender_id
|
||||
if args in userA["users"]:
|
||||
userA["users"].remove(args)
|
||||
self.db.set('RPMod', 'useraccept', userA)
|
||||
await utils.answer(message, f'<b>Пользователю <code>{args}</code> был закрыт доступ.</b>')
|
||||
elif args in userA["chats"]:
|
||||
userA["chats"].remove(args)
|
||||
self.db.set('RPMod', 'useraccept', userA)
|
||||
await utils.answer(message, f'<b>Чату <code>{args}</code> был закрыт доступ.</b>')
|
||||
elif args not in userA["chats"] and type(await message.client.get_entity(args)) == Channel:
|
||||
userA["chats"].append(args)
|
||||
self.db.set('RPMod', 'useraccept', userA)
|
||||
await utils.answer(message, f'<b>Чату <code>{args}</code> был открыт доступ.</b>')
|
||||
else:
|
||||
userA["users"].append(args)
|
||||
self.db.set('RPMod', 'useraccept', userA)
|
||||
await utils.answer(message, f'<b>Пользователю <code>{args}</code> был открыт доступ.</b>')
|
||||
else:
|
||||
await utils.answer(message, 'Что то не так..')
|
||||
|
||||
async def rpconfcmd(self, message):
|
||||
"""Настройка шаблона для рп"""
|
||||
conf = self.db.get("RPMod", "rpconfigurate", conf_default)
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
sms = '⚙️ <b>Настройка шаблона для команды:</b>\n'
|
||||
s1 = '\n'.join([' | '.join([key, value[1], '✅' if value[0] else '❌']) for key, value in conf['-s1'].items()])
|
||||
s2 = '\n'.join([' | '.join([key, value[1], '✅' if value[0] else '❌']) for key, value in conf['-s2'].items()])
|
||||
s3 = '\n'.join([' | '.join([key, value[1], '✅' if value[0] else '❌']) for key, value in conf['-s3'].items()])
|
||||
sE = '\n'.join([' | '.join([key, value[1], '✅' if value[0] else '❌']) for key, value in conf['-sE'].items()])
|
||||
sS = '\n'.join([' | '.join([key, value[1], '✅' if value[0] else '❌']) for key, value in conf['-sS'].items()])
|
||||
msg_text = f'⚙️ <b>Настройка шаблона для команды:</b>\n-s1 --- включить/выключить стиль для действия:\n{s1}\n-s2 --- аналогично для s1, но действует на текст "С репликой":\n{s2}\n-s3 --- аналогично для s2, но действует на саму реплику:\n{s3}\n-sE --- выбор эмодзи перед репликой:\n{sE}\n-sS --- выбор символа для разрыва строк в реплике:\n{sS}\n\nПример:\n<code>.rpconf -s1 2</code>'
|
||||
return await utils.answer(message, msg_text)
|
||||
args = args.split(' ')
|
||||
if len(args) <= 1:
|
||||
return await utils.answer(message, 'Было введено меньше двух аргументов.')
|
||||
try:
|
||||
if args[0] == '-s1' or args[0] == '-s2' or args[0] == '-s3':
|
||||
if conf[args[0]][args[1]][0]:
|
||||
conf[args[0]][args[1]][0] = False
|
||||
else:
|
||||
conf[args[0]][args[1]][0] = True
|
||||
elif args[0] == '-sE' or args[0] == '-sS':
|
||||
for i in conf[args[0]].keys():
|
||||
conf[args[0]][i][0] = False
|
||||
conf[args[0]][args[1]][0] = True
|
||||
else:
|
||||
return await utils.answer(message, 'Неизвестный аргумент.')
|
||||
except:
|
||||
return await utils.answer(message, 'Неверная цифра.')
|
||||
self.db.set("RPMod", "rpconfigurate", conf)
|
||||
await utils.answer(message, f'Конфигурация успешно изменена.')
|
||||
|
||||
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')
|
||||
ex = self.db.get("RPMod", "exlist")
|
||||
nicks = self.db.get('RPMod', 'rpnicks')
|
||||
users_accept = self.db.get('RPMod', 'useraccept')
|
||||
conf = self.db.get("RPMod", "rpconfigurate", conf_default)
|
||||
|
||||
chat_rp = await message.client.get_entity(message.to_id)
|
||||
if status != 1 or chat_rp.id in ex: return
|
||||
me_id = (await message.client.get_me()).id
|
||||
|
||||
if message.sender_id not in users_accept["users"] and message.sender_id != me_id and chat_rp.id not in users_accept["chats"]: return
|
||||
me = (await message.client.get_entity(message.sender_id))
|
||||
|
||||
if str(me.id) in nicks.keys():
|
||||
nick = nicks[str(me.id)]
|
||||
else:
|
||||
nick = me.first_name
|
||||
args = message.text.lower()
|
||||
|
||||
|
||||
lines = args.splitlines()
|
||||
tags = lines[0].split(' ')
|
||||
if not tags[-1].startswith('@'):
|
||||
reply = await message.get_reply_message()
|
||||
user = await message.client.get_entity(reply.sender_id)
|
||||
else:
|
||||
if not tags[-1][1:].isdigit():
|
||||
user = await message.client.get_entity(tags[-1])
|
||||
else:
|
||||
user = await message.client.get_entity(int(tags[-1][1:]))
|
||||
lines[0] = lines[0].rsplit(' ', 1)[0]
|
||||
detail = lines[0].split(' ',maxsplit=1)
|
||||
if len(detail) < 2:
|
||||
detail.append(' ')
|
||||
if detail[0] not in comand.keys(): return
|
||||
detail[1] = ' ' + detail[1]
|
||||
user.first_name = nicks[str(user.id)] if str(user.id) in nicks else user.first_name
|
||||
sE = ''.join([''.join([ value[1] if value[0] else '']) for key, value in conf['-sE'].items()])
|
||||
s1 = [''.join([ value[2] if value[0] else '' for value in conf['-s1'].values()]), ''.join([ value[3] if value[0] else '' for value in dict(reversed(list(conf['-s1'].items()))).values()])]
|
||||
s2 = [''.join([ value[2] if value[0] else '' for key, value in conf['-s2'].items()]), ''.join([ value[3] if value[0] else '' for value in dict(reversed(list(conf['-s2'].items()))).values()])]
|
||||
s3 = [''.join([ value[2] if value[0] else '' for key, value in conf['-s3'].items()]), ''.join([ value[3] if value[0] else '' for value in dict(reversed(list(conf['-s3'].items()))).values()])]
|
||||
sS = ''.join([''.join([ value[2] if value[0] else '']) for key, value in conf['-sS'].items()])
|
||||
|
||||
rpMessageSend = ''
|
||||
if detail[0] in emojies.keys(): rpMessageSend += emojies[detail[0]] + ' | '
|
||||
rpMessageSend += f"<a href=tg://user?id={me.id}>{nick}</a> {s1[0]}{comand[detail[0]]}{s1[1]} <a href=tg://user?id={user.id}>{user.first_name}</a>{detail[1]}"
|
||||
if len(lines) >= 2: rpMessageSend += "\n{0} {1[0]}С репликой:{1[1]} {2[0]}{3}{2[1]}".format(sE, s2, s3, sS.join(lines[1:]))
|
||||
if rezjim == 1:
|
||||
return await utils.answer(message, rpMessageSend)
|
||||
else:
|
||||
return await message.respond(rpMessageSend)
|
||||
|
||||
except: pass
|
||||
|
||||
def merge_dict(self, d1, d2):
|
||||
d_all = {**d1, **d2}
|
||||
for key in d_all:
|
||||
d_all[key] = {**d1[key], **d_all[key]}
|
||||
return d_all
|
||||
146
trololo65/Modules/SeeChat.py
Normal file
146
trololo65/Modules/SeeChat.py
Normal file
@@ -0,0 +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>:")
|
||||
await message.forward_to(chat.id)
|
||||
83
trololo65/Modules/TTsaveMod.py
Normal file
83
trololo65/Modules/TTsaveMod.py
Normal file
@@ -0,0 +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> добавлен.')
|
||||
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?://)?v[mt]\.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
|
||||
74
trololo65/Modules/VSpamMod.py
Normal file
74
trololo65/Modules/VSpamMod.py
Normal file
File diff suppressed because one or more lines are too long
102
trololo65/Modules/Vizjener.py
Normal file
102
trololo65/Modules/Vizjener.py
Normal file
@@ -0,0 +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>')
|
||||
66
trololo65/Modules/farmMoo.py
Normal file
66
trololo65/Modules/farmMoo.py
Normal file
@@ -0,0 +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
|
||||
|
||||
|
||||
|
||||
91
trololo65/Modules/glitchMod.py
Normal file
91
trololo65/Modules/glitchMod.py
Normal file
@@ -0,0 +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
|
||||
|
||||
|
||||
75
trololo65/Modules/translatepyMod.py
Normal file
75
trololo65/Modules/translatepyMod.py
Normal file
@@ -0,0 +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'Неверно введён сервис.')
|
||||
83
trololo65/Modules/ttsave.py
Normal file
83
trololo65/Modules/ttsave.py
Normal file
@@ -0,0 +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
|
||||
32
trololo65/Modules/webshot.py
Normal file
32
trololo65/Modules/webshot.py
Normal file
@@ -0,0 +1,32 @@
|
||||
from .. import loader, utils
|
||||
import logging
|
||||
from requests import get
|
||||
import io
|
||||
|
||||
@loader.tds
|
||||
class WebShotMod(loader.Module):
|
||||
"""link to screen"""
|
||||
strings = {
|
||||
"name": "WebShot"
|
||||
}
|
||||
|
||||
|
||||
@loader.sudo
|
||||
async def webshotcmd(self, message):
|
||||
""".webshot <link>"""
|
||||
reply = None
|
||||
link = utils.get_args_raw(message)
|
||||
if not link:
|
||||
reply = await message.get_reply_message()
|
||||
if not reply:
|
||||
await message.delete()
|
||||
return
|
||||
link = reply.raw_text
|
||||
await message.edit("<b>📸Фоткаю...</b>")
|
||||
url = "https://mini.s-shot.ru/1024x768/JPEG/1024/Z100/?{}"
|
||||
file = get(url.format(link))
|
||||
file = io.BytesIO(file.content)
|
||||
file.name = "webshot.png"
|
||||
file.seek(0)
|
||||
await message.client.send_file(message.to_id, file, reply_to=reply)
|
||||
await message.delete()
|
||||
Reference in New Issue
Block a user