This repository has been archived by the owner on Jul 10, 2022. It is now read-only.
forked from udf/uniborg
-
Notifications
You must be signed in to change notification settings - Fork 451
/
qr_code.py
103 lines (97 loc) · 3.23 KB
/
qr_code.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
"""Quick Response Codes
Available Commands
.getqr
.makeqr <long text to include>"""
import asyncio
from datetime import datetime
import os
import qrcode
from bs4 import BeautifulSoup
def progress(current, total):
logger.info("Downloaded {} of {}\nCompleted {}".format(current, total, (current / total) * 100))
@borg.on(slitu.admin_cmd(pattern="getqr"))
async def _(event):
if event.fwd_from:
return
start = datetime.now()
if not os.path.isdir(Config.TMP_DOWNLOAD_DIRECTORY):
os.makedirs(Config.TMP_DOWNLOAD_DIRECTORY)
downloaded_file_name = await borg.download_media(
await event.get_reply_message(),
Config.TMP_DOWNLOAD_DIRECTORY,
progress_callback=progress
)
# parse the Official ZXing webpage to decode the QR
command_to_exec = [
"curl",
"-X", "POST",
"-F", "f=@" + downloaded_file_name + "",
"https://zxing.org/w/decode"
]
t_response, e_response = await slitu.run_command(command_to_exec)
os.remove(downloaded_file_name)
if not t_response:
logger.info(e_response)
logger.info(t_response)
await event.edit("oo0pps .. something wrongings. Failed to decode QRCode")
return
soup = BeautifulSoup(t_response, "html.parser")
qr_contents = soup.find_all("pre")[0].text
end = datetime.now()
ms = (end - start).seconds
await event.edit("Obtained QRCode contents in {} seconds.\n{}".format(ms, qr_contents))
await asyncio.sleep(5)
await event.edit(qr_contents)
@borg.on(slitu.admin_cmd(pattern="makeqr ?(.*)"))
async def _(event):
if event.fwd_from:
return
start = datetime.now()
input_str = event.pattern_match.group(1)
message = "SYNTAX: `.makeqr <long text to include>`"
reply_msg_id = event.message.id
if input_str:
message = input_str
elif event.reply_to_msg_id:
previous_message = await event.get_reply_message()
reply_msg_id = previous_message.id
if previous_message.media:
downloaded_file_name = await borg.download_media(
previous_message,
Config.TMP_DOWNLOAD_DIRECTORY,
progress_callback=progress
)
m_list = None
with open(downloaded_file_name, "rb") as fd:
m_list = fd.readlines()
message = ""
for m in m_list:
message += m.decode("UTF-8") + "\r\n"
os.remove(downloaded_file_name)
else:
message = previous_message.message
else:
message = "SYNTAX: `.makeqr <long text to include>`"
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(message)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save("img_file.webp", "PNG")
await borg.send_file(
event.chat_id,
"img_file.webp",
caption=message,
reply_to=reply_msg_id,
progress_callback=progress
)
os.remove("img_file.webp")
end = datetime.now()
ms = (end - start).seconds
await event.edit("Created QRCode in {} seconds".format(ms))
await asyncio.sleep(5)
await event.delete()