Skip to content

Commit 03df5cf

Browse files
author
Nicole Schmidt
committed
use replied message user_id to select color
1 parent 3845fbc commit 03df5cf

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

picobot/handlers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ def add_text(bot: Bot, msg: Message, user_id: int, pack_name: str, emoji: str):
160160

161161
text = msg.reply_to_message.text
162162
# save as png
163-
img_path = sticker_from_text(user_id, username, text, avatar_path, msg_time)
163+
img_path = sticker_from_text(user_id, username, text, avatar_path, msg_time, other_user_id)
164164
try:
165165
with open(img_path, 'rb') as png_sticker:
166166
bot.add_sticker_to_set(

picobot/painter.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -152,16 +152,15 @@ def draw_time(txt_draw: ImageDraw.ImageDraw, points: Box, text="04:20"):
152152

153153

154154
def draw_avatar(
155-
img: Image, draw: ImageDraw.ImageDraw, username: str, points_balloon: Box, avatar_path: str, user_id: int
155+
img: Image, draw: ImageDraw.ImageDraw, username: str, points_balloon: Box, avatar_path: str, background_color: str
156156
):
157157
y0 = points_balloon.bottom_right.y - AVATAR_SIZE
158158
y1 = points_balloon.bottom_right.y
159159
points = Box(MARGIN, y0, MARGIN + AVATAR_SIZE, y1)
160160
box_position = tuple(a - 2 for a in points.top_left.to_tuple())
161161
size = AVATAR_SIZE + 4
162162
if avatar_path == '':
163-
avatar_color = FOREGROUND_COLORS[user_id % len(FOREGROUND_COLORS)]
164-
draw.ellipse(points.to_list(), fill=avatar_color)
163+
draw.ellipse(points.to_list(), fill=background_color)
165164
avatar_center = points.center().to_tuple()
166165
draw.text(
167166
avatar_center, username[0], anchor='mm', font=FONTS['avatar'], fill='#FFFFFF',
@@ -184,7 +183,7 @@ def draw_avatar(
184183
img.paste(tmp, mask=avatar_mask)
185184

186185

187-
def sticker_from_text(user_id: int, username: str, text: str, avatar_path: str, msg_time: str):
186+
def sticker_from_text(user_id: int, username: str, text: str, avatar_path: str, msg_time: str, other_user_id: int):
188187
'''
189188
Creates an image from a text message, emulating Telegram's message layout/design.
190189
'''
@@ -227,12 +226,12 @@ def sticker_from_text(user_id: int, username: str, text: str, avatar_path: str,
227226

228227
img = Image.new("RGBA", size, transparent)
229228
dr = ImageDraw.Draw(img)
230-
draw_avatar(img, dr, username, points_balloon=points_balloon, avatar_path=avatar_path, user_id=user_id)
229+
user_color = get_user_color(other_user_id)
230+
draw_avatar(img, dr, username, points_balloon=points_balloon, avatar_path=avatar_path, background_color=user_color)
231231

232232
draw_balloon(dr, points=points_balloon, fill=BOX_COLOR)
233233

234-
username_color = FOREGROUND_COLORS[user_id % len(FOREGROUND_COLORS)]
235-
draw_username(dr, position=points_balloon.top_left, username=username, fill=username_color)
234+
draw_username(dr, position=points_balloon.top_left, username=username, fill=user_color)
236235
draw_message(dr, points=points_balloon, text=final_text, user_size=title_size)
237236
draw_time(dr, text=msg_time, points=points_balloon)
238237

@@ -297,3 +296,7 @@ def generate_avatar_mask(img_size: tuple, points: Box):
297296
maskdraw.ellipse(points.to_list(), fill='#FFFFFF')
298297
del maskdraw
299298
return img
299+
300+
301+
def get_user_color(user_id: int) -> str:
302+
return FOREGROUND_COLORS[user_id % len(FOREGROUND_COLORS)]

0 commit comments

Comments
 (0)