Passed
Push — master ( 1eef4e...280449 )
by Anas
02:26
created

modules.kek.kekify_gifs()   A

Complexity

Conditions 4

Size

Total Lines 10
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 10
nop 3
dl 0
loc 10
rs 9.9
c 0
b 0
f 0
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)
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable path does not seem to be defined.
Loading history...
34
    except:
35
        update.message.reply_text("Can't get the image")
36
        return
37
    if extension not in extensions:
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable extensions does not seem to be defined.
Loading history...
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)
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable path does not seem to be defined.
Loading history...
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:
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable path does not seem to be defined.
Loading history...
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