|
@@ -1,155 +0,0 @@
|
|
|
-import itertools
|
|
|
|
|
-import os
|
|
|
|
|
-import random
|
|
|
|
|
-import secrets
|
|
|
|
|
-from textwrap import TextWrapper
|
|
|
|
|
-from urllib.request import urlretrieve
|
|
|
|
|
-
|
|
|
|
|
-from PIL import Image
|
|
|
|
|
-from PIL import ImageDraw
|
|
|
|
|
-from PIL import ImageFont
|
|
|
|
|
-
|
|
|
|
|
-from .crop import crop_to_circle
|
|
|
|
|
-from .get_height import get_y_and_heights
|
|
|
|
|
-from .rectangle import rounded_rectangle
|
|
|
|
|
-
|
|
|
|
|
-""" Taken From https://github.com/pokurt/Nana-Remix/tree/
|
|
|
|
|
-8d10285c9ba68ec127d3d4f0d6e7a67e48ca5f4d/nana/utils/sticker """
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-COLORS = [
|
|
|
|
|
- '#F07975',
|
|
|
|
|
- '#F49F69',
|
|
|
|
|
- '#F9C84A',
|
|
|
|
|
- '#8CC56E',
|
|
|
|
|
- '#6CC7DC',
|
|
|
|
|
- '#80C1FA',
|
|
|
|
|
- '#BCB3F9',
|
|
|
|
|
- '#E181AC',
|
|
|
|
|
-]
|
|
|
|
|
-
|
|
|
|
|
-urlretrieve(
|
|
|
|
|
- 'https://github.com/pokurt/Fonts/raw/master/NotoSansDisplay-Bold.ttf',
|
|
|
|
|
- 'wbb/modules/sticker/NotoSansDisplay-Bold.ttf',
|
|
|
|
|
-)
|
|
|
|
|
-
|
|
|
|
|
-urlretrieve(
|
|
|
|
|
- 'https://github.com/pokurt/Fonts/raw/master/OpenSans-Regular.ttf',
|
|
|
|
|
- 'wbb/modules/sticker/OpenSans-Regular.ttf',
|
|
|
|
|
-)
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-async def create_sticker(client, message):
|
|
|
|
|
- if len(message.text) < 100:
|
|
|
|
|
- body_font_size = 25
|
|
|
|
|
- wrap_size = 40
|
|
|
|
|
- elif len(message.text) < 200:
|
|
|
|
|
- body_font_size = 20
|
|
|
|
|
- wrap_size = 45
|
|
|
|
|
- elif len(message.text) < 500:
|
|
|
|
|
- body_font_size = 17
|
|
|
|
|
- wrap_size = 50
|
|
|
|
|
- elif len(message.text) < 1000:
|
|
|
|
|
- body_font_size = 15
|
|
|
|
|
- wrap_size = 90
|
|
|
|
|
- else:
|
|
|
|
|
- body_font_size = 8
|
|
|
|
|
- wrap_size = 200
|
|
|
|
|
-
|
|
|
|
|
- font = ImageFont.truetype(
|
|
|
|
|
- 'wbb/modules/sticker/OpenSans-Regular.ttf',
|
|
|
|
|
- body_font_size,
|
|
|
|
|
- )
|
|
|
|
|
- font_who = ImageFont.truetype(
|
|
|
|
|
- 'wbb/modules/sticker/NotoSansDisplay-Bold.ttf',
|
|
|
|
|
- 24,
|
|
|
|
|
- )
|
|
|
|
|
-
|
|
|
|
|
- img = Image.new(
|
|
|
|
|
- 'RGBA',
|
|
|
|
|
- (512, 512),
|
|
|
|
|
- (255, 255, 255, 0),
|
|
|
|
|
- )
|
|
|
|
|
- draw = ImageDraw.Draw(img)
|
|
|
|
|
- draw.rounded_rectangle = rounded_rectangle
|
|
|
|
|
-
|
|
|
|
|
- wrapper = TextWrapper(
|
|
|
|
|
- width=wrap_size,
|
|
|
|
|
- break_long_words=False,
|
|
|
|
|
- replace_whitespace=False,
|
|
|
|
|
- )
|
|
|
|
|
- lines_list = [
|
|
|
|
|
- wrapper.wrap(i) for i in message.text.split('\n') if i != ''
|
|
|
|
|
- ]
|
|
|
|
|
- text_lines = list(itertools.chain.from_iterable(lines_list))
|
|
|
|
|
-
|
|
|
|
|
- y, line_heights = await get_y_and_heights(
|
|
|
|
|
- text_lines,
|
|
|
|
|
- (512, 512),
|
|
|
|
|
- 10,
|
|
|
|
|
- font,
|
|
|
|
|
- )
|
|
|
|
|
-
|
|
|
|
|
- in_y = y
|
|
|
|
|
- rec_y = (y + line_heights[0]) if wrap_size >= 40 else y
|
|
|
|
|
-
|
|
|
|
|
- for i, _ in enumerate(text_lines):
|
|
|
|
|
- rec_y += line_heights[i]
|
|
|
|
|
-
|
|
|
|
|
- await rounded_rectangle(
|
|
|
|
|
- draw,
|
|
|
|
|
- (
|
|
|
|
|
- (90, in_y),
|
|
|
|
|
- (512, rec_y + line_heights[-1]),
|
|
|
|
|
- ),
|
|
|
|
|
- 10,
|
|
|
|
|
- fill='#e0e0e0',
|
|
|
|
|
- )
|
|
|
|
|
- first = message.from_user.first_name
|
|
|
|
|
- f_user = (
|
|
|
|
|
- first
|
|
|
|
|
- + ' '
|
|
|
|
|
- + message.from_user.last_name
|
|
|
|
|
- if message.from_user.last_name else first
|
|
|
|
|
- )
|
|
|
|
|
- draw.text(
|
|
|
|
|
- (100, y),
|
|
|
|
|
- f'{f_user}',
|
|
|
|
|
- random.choice(COLORS),
|
|
|
|
|
- font=font_who,
|
|
|
|
|
- )
|
|
|
|
|
-
|
|
|
|
|
- y = (y + (line_heights[0] * (20/100))) if wrap_size >= 40 else y
|
|
|
|
|
-
|
|
|
|
|
- x = 100
|
|
|
|
|
- for i, line in enumerate(text_lines):
|
|
|
|
|
- y += line_heights[i]
|
|
|
|
|
- draw.text((x, y), line, '#211536', font=font)
|
|
|
|
|
-
|
|
|
|
|
- try:
|
|
|
|
|
- user_profile_pic = await client.get_profile_photos(
|
|
|
|
|
- message.from_user.id,
|
|
|
|
|
- )
|
|
|
|
|
- photo = await client.download_media(user_profile_pic[0].file_id)
|
|
|
|
|
- except IndexError:
|
|
|
|
|
- urlretrieve(
|
|
|
|
|
- 'https://telegra.ph/file/1d3bf9a37547be4b04dcd.jpg',
|
|
|
|
|
- 'wbb/modules/sticker/default.jpg',
|
|
|
|
|
- )
|
|
|
|
|
- photo = 'wbb/modules/sticker/default.jpg'
|
|
|
|
|
-
|
|
|
|
|
- im = Image.open(photo).convert('RGBA')
|
|
|
|
|
- im.thumbnail((60, 60))
|
|
|
|
|
- await crop_to_circle(im)
|
|
|
|
|
- img.paste(im, (20, in_y))
|
|
|
|
|
-
|
|
|
|
|
- sticker_file = f'{secrets.token_hex(2)}.webp'
|
|
|
|
|
-
|
|
|
|
|
- img.save(sticker_file)
|
|
|
|
|
-
|
|
|
|
|
- await message.reply_sticker(
|
|
|
|
|
- sticker=sticker_file,
|
|
|
|
|
- )
|
|
|
|
|
-
|
|
|
|
|
- if os.path.isfile(sticker_file):
|
|
|
|
|
- os.remove(sticker_file)
|
|
|