# 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• {args_glitch[0]} --- возвращает изображение как гифку. \n• {args_glitch[1]} --- добавляет эффект смещения цвета. \n• {args_glitch[2]} --- добавляет эффект линий.')
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• {glitch_opt[0]} --- количество кадров.\n• {glitch_opt[1]} --- количество кадров без глюка(значение 1 ставит все кадры с глюком).\n• {glitch_opt[2]} --- длительность кадра(в миллисекундах).\n• {glitch_opt[3]} --- количество зацикливаний(значение 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'Опция {i} успешно установлена со значением {args[1]}')
return
message = await utils.answer(message, 'Нет совпадений опций или неправильное значение.')
return