-
Notifications
You must be signed in to change notification settings - Fork 0
/
cute_call_bot.py
77 lines (56 loc) · 2.13 KB
/
cute_call_bot.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
from telegram.ext import Updater, InlineQueryHandler
from telegram import InlineQueryResultPhoto
from telegram.ext.dispatcher import run_async
from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw
from uuid import uuid4
from glob import glob
import logging
from config import token, url
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.DEBUG)
logger = logging.getLogger(__name__)
updater = Updater(token=token)
dispatcher = updater.dispatcher
@run_async
def cute_call(bot, update):
query = update.inline_query.query
if not query:
return
results = list()
for img in map(Image.open, sorted(glob('*.jpg'))):
_id = uuid4().hex
font_file = 'NotoSansCJK-Regular.ttc'
img_size = img.size
font_size = int(img_size[1]/6)
font = ImageFont.truetype(font_file, font_size)
text_size = font.getsize(query)
while text_size[0] > img_size[0]*0.98:
font_size = font_size - 1
font = ImageFont.truetype(font_file, font_size)
text_size = font.getsize(query)
text_position_x = img_size[0]/2 - text_size[0]/2
text_position_y = img_size[1]*310/512 + (img_size[1] - img_size[1]*310/512 - text_size[1])/2
text_position = (text_position_x, text_position_y)
draw = ImageDraw.Draw(img)
draw.text(text_position, query, (0, 0, 0), font=font)
img.save('./memes/'+ _id + '.jpg')
img.thumbnail((128,128), Image.ANTIALIAS)
img.save('./memes/' + _id + '_thumbnail' + '.jpg')
img_url = url + _id + '.jpg'
thumb_url = url + _id + '_thumbnail' + '.jpg'
results.append(
InlineQueryResultPhoto(
id=_id,
photo_width=img_size[0],
photo_height=img_size[1],
photo_url=img_url,
thumb_url=thumb_url
)
)
bot.answer_inline_query(update.inline_query.id, results)
inline_caps_handler = InlineQueryHandler(cute_call)
dispatcher.add_handler(inline_caps_handler)
updater.start_polling()
updater.idle()