|
1
|
|
|
#!/usr/bin/python |
|
2
|
|
|
# -*- coding: utf-8 -*- |
|
3
|
|
|
from modules.utils import caption_filter, get_image, send_image |
|
4
|
|
|
from modules.logging import logging_decorator |
|
5
|
|
|
from telegram.ext import CommandHandler, MessageHandler |
|
6
|
|
|
from telegram import ChatAction |
|
7
|
|
|
from wand.image import Image |
|
8
|
|
|
from datetime import datetime |
|
9
|
|
|
import os |
|
10
|
|
|
|
|
11
|
|
|
|
|
12
|
|
|
def module_init(gd): |
|
13
|
|
|
global path, extensions |
|
14
|
|
|
extensions = gd.config["extensions"] |
|
15
|
|
|
commands = gd.config["commands"] |
|
16
|
|
|
path = gd.config["path"] |
|
17
|
|
|
for command in commands: |
|
18
|
|
|
gd.dp.add_handler(MessageHandler(caption_filter("/"+command), kek)) |
|
19
|
|
|
gd.dp.add_handler(CommandHandler(command, kek)) |
|
20
|
|
|
|
|
21
|
|
|
|
|
22
|
|
|
@logging_decorator("kek") |
|
23
|
|
|
def kek(bot, update): |
|
24
|
|
|
filename = datetime.now().strftime("%d%m%y-%H%M%S%f") |
|
25
|
|
|
if update.message.reply_to_message is not None: |
|
26
|
|
|
kek_param = "".join(update.message.text[5:7]) |
|
27
|
|
|
elif update.message.caption is not None: |
|
28
|
|
|
kek_param = "".join(update.message.caption[5:7]) |
|
29
|
|
|
else: |
|
30
|
|
|
update.message.reply_text("You need an image for that") |
|
31
|
|
|
return |
|
32
|
|
|
try: |
|
33
|
|
|
extension = get_image(bot, update, path, filename) |
|
|
|
|
|
|
34
|
|
|
except: |
|
35
|
|
|
update.message.reply_text("Can't get the image") |
|
36
|
|
|
return |
|
37
|
|
|
if extension not in extensions: |
|
|
|
|
|
|
38
|
|
|
update.message.reply_text("Unsupported file") |
|
39
|
|
|
return False |
|
40
|
|
|
update.message.chat.send_action(ChatAction.UPLOAD_PHOTO) |
|
41
|
|
|
|
|
42
|
|
|
if extension in [".mp4", ".gif"]: |
|
43
|
|
|
if kek_param == "-m": |
|
44
|
|
|
update.message.reply_text("Multikek unsupported for animations") |
|
45
|
|
|
return |
|
46
|
|
|
result = kekify_gifs(kek_param, filename, extension) |
|
47
|
|
|
else: |
|
48
|
|
|
_, _, result = kekify(kek_param, filename, extension, None) |
|
49
|
|
|
result.save(filename=path+filename+extension) |
|
50
|
|
|
result.close() |
|
51
|
|
|
send_image(update, path, filename, extension) |
|
52
|
|
|
os.remove(path+filename+extension) |
|
53
|
|
|
|
|
54
|
|
|
|
|
55
|
|
|
def kekify(kek_param, filename, extension, file): |
|
56
|
|
|
if kek_param == "-m": |
|
57
|
|
|
result = multikek(filename, extension) |
|
58
|
|
|
return None, None, result |
|
59
|
|
|
if file == None: |
|
60
|
|
|
source = Image(filename=path+filename+extension) |
|
|
|
|
|
|
61
|
|
|
else: |
|
62
|
|
|
source = file |
|
63
|
|
|
w = source.width; h = source.height |
|
64
|
|
|
c, p1, p2, f = get_values(kek_param, w, h) |
|
65
|
|
|
with source.clone() as part1: |
|
66
|
|
|
part1.crop(c[0], c[1], c[2], c[3]) |
|
67
|
|
|
with part1.clone() as part2: |
|
68
|
|
|
getattr(part2, f)() |
|
69
|
|
|
new_canvas = Image() |
|
70
|
|
|
new_canvas.blank(w, h) |
|
71
|
|
|
new_canvas.composite(part1, p1[0], p1[1]) |
|
72
|
|
|
new_canvas.composite(part2, p2[0], p2[1]) |
|
73
|
|
|
source.close() |
|
74
|
|
|
return w, h, new_canvas |
|
75
|
|
|
|
|
76
|
|
|
def kekify_gifs(kek_param, filename, extension): |
|
77
|
|
|
with Image(filename=path+filename+extension) as source: |
|
|
|
|
|
|
78
|
|
|
w = source.width; h = source.height |
|
79
|
|
|
new = Image() |
|
80
|
|
|
for i in range(len(source.sequence)): |
|
81
|
|
|
with source.sequence[i] as frame: |
|
82
|
|
|
img = Image(image=frame) |
|
83
|
|
|
_, _, result = kekify(kek_param, filename, extension, img) |
|
84
|
|
|
new.sequence.append(result) |
|
85
|
|
|
return new |
|
86
|
|
|
|
|
87
|
|
|
|
|
88
|
|
|
def multikek(filename, extension): |
|
89
|
|
|
w, h, canvasL = kekify("-l", filename, extension, None) |
|
90
|
|
|
w, h, canvasR = kekify("-r", filename, extension, None) |
|
91
|
|
|
w, h, canvasT = kekify("-t", filename, extension, None) |
|
92
|
|
|
w, h, canvasB = kekify("-b", filename, extension, None) |
|
93
|
|
|
big_canvas = Image() |
|
94
|
|
|
big_canvas.blank(w*2, h*2) |
|
95
|
|
|
big_canvas.composite(canvasL, 0, 0) |
|
96
|
|
|
big_canvas.composite(canvasR, w, 0) |
|
97
|
|
|
big_canvas.composite(canvasT, 0, h) |
|
98
|
|
|
big_canvas.composite(canvasB, w, h) |
|
99
|
|
|
canvasL.close() |
|
100
|
|
|
canvasR.close() |
|
101
|
|
|
canvasT.close() |
|
102
|
|
|
canvasB.close() |
|
103
|
|
|
return big_canvas |
|
104
|
|
|
|
|
105
|
|
|
|
|
106
|
|
|
def get_values(kek_param, w, h): |
|
107
|
|
|
parameters = { |
|
108
|
|
|
"": [[0, 0, w//2, h], [0, 0], [w//2, 0], "flop"], |
|
109
|
|
|
"-l": [[0, 0, w//2, h], [0, 0], [w//2, 0], "flop"], |
|
110
|
|
|
"-r": [[w//2, 0, w, h], [w//2, 0], [0, 0], "flop"], |
|
111
|
|
|
"-t": [[0, 0, w, h//2], [0, 0], [0, h//2], "flip"], |
|
112
|
|
|
"-b": [[0, h//2, w, h], [0, h//2], [0, 0], "flip"], |
|
113
|
|
|
} |
|
114
|
|
|
try: |
|
115
|
|
|
params = parameters[kek_param] |
|
116
|
|
|
except KeyError: |
|
117
|
|
|
params = parameters[""] |
|
118
|
|
|
return params |
|
119
|
|
|
|