import os
import aiogram
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
import re
from PIL import Image, ImageDraw, ImageFont
bot = aiogram.Bot(token="токен")
dp = aiogram.Dispatcher(bot)
def add_text_to_image(image_path, text, font_path, image_name):
# Открываем изображение
image = Image.open(image_path)
# Создаем объект для рисования на изображении
draw = ImageDraw.Draw(image)
# Загружаем шрифт из ttf файла
font = ImageFont.truetype(font_path, size=100)
# Очищаем строку от неподдерживаемых символов
cleaned_text = re.sub(r'[^\w\sа-яА-ЯёЁ,.!?]+', '', text)
# Определяем положение текста на изображении
text_position = (10, 50)
# Рисуем текст на изображении
draw.text(text_position, cleaned_text, fill="white", font=font)
# Сохраняем измененное изображение
image.save(f"{image_name}.jpg")
@dp.message_handler(content_types=['document'])
async def process_document(message: aiogram.types.Message):
await message.reply(re.sub('<.*?>', '', (await bot.download_file((
await bot.get_file(message.document.file_id))
.file_path)).read().decode()))
@dp.message_handler(commands=['profile'])
async def add_text_to_image_and_send(message: aiogram.types.Message):
keyboard = InlineKeyboardMarkup(row_width=1)
# Добавляем кнопки профиля
balance_button = InlineKeyboardButton(text="Мой баланс", callback_data="balance")
history_button = InlineKeyboardButton(text="История операций", callback_data="history")
tariffs_button = InlineKeyboardButton(text="Тарифы", callback_data="tariffs")
keyboard.add(balance_button, history_button, tariffs_button)
# Проверяем, есть ли у нас уже фото для профиля
if not os.path.exists(f"{message.from_user.id}.jpg"):
add_text_to_image("pattern-monochrome-telegram-logo-cats-hd-wallpaper-preview.jpg",
f"Привет, {message.from_user.first_name}!", "Nunito-Regular.ttf", str(message.from_user.id))
with open(f"{message.from_user.id}.jpg", "rb") as photo:
# Отправляем пользователю изображение
await message.reply_photo(photo, reply_markup=keyboard)
if __name__ == '__main__':
aiogram.executor.start_polling(dp)