Задача в том, чтобы спросить сначала желаемый цвет, потом сам текст. Далее передаём это в функцию по созданию QR-кода
Вот код:
import qrcode
import telebot
import setting as a
@bot.message_handler(commands=["makeqr"], content_types=['text'])
def choose_color(message):
bot.send_message (message.chat.id, "*Выберите цвет:\n 1. Синий/тёмно-бежевый\n2. Серый/бежевый\n3. Хаки/белый\n4. Тёмно-красный/бирюзовый\n5. Фиолетовый/желый*\n\nВведите цифру:", parse_mode="Markdown")
users_color = bot.register_next_step_handler(users_color, makeqr)
def trigger_makeqr(message):
bot.send_message (message.chat.id, "*Пришлите ссылку на сайт или текст:*", parse_mode="Markdown")
users_text = bot.register_next_step_handler(users_text, makeqr)
def makeqr(message, users_color, users_text):
extractor = urlextract.URLExtract() #Проверяем, ссылка это или нет
urls = extractor.find_urls(users_text)
qrcod = qrcode.QRCode( #Создаем qr-код
version = 1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=20,
border=5,)
if urls != []: #Если сообщение от пользователя ссылка - сокращаем её
tinylink = pyshorteners.Shortener()
tiny_user_link = tinylink.tinyurl.short(users_text)
qrcod.add_data(tiny_user_link)
else:
qrcod.add_data(users_text) #Иначе создаём qr-код с текстом
qrcod.make(fit=True)
if users_color == '1': #Тут уже и начинается проверка на цвета, применяем скругление и цвет
img = qrcod.make_image(image_factory = StyledPilImage, module_drawer = RoundedModuleDrawer(radius_ratio = 1), color_mask = SolidFillColorMask(a.colors['color_one']))
elif users_color == '2':
img = qrcod.make_image(image_factory = StyledPilImage, module_drawer = RoundedModuleDrawer(radius_ratio = 1), color_mask = SolidFillColorMask(a.colors['color_two']))
elif users_color == '3':
img = qrcod.make_image(image_factory = StyledPilImage, module_drawer = RoundedModuleDrawer(radius_ratio = 1), color_mask = SolidFillColorMask(a.colors['color_three']))
elif users_color == '4':
img = qrcod.make_image(image_factory = StyledPilImage, module_drawer = RoundedModuleDrawer(radius_ratio = 1), color_mask = SolidFillColorMask(a.colors['color_four']))
elif users_color == '5':
img = qrcod.make_image(image_factory = StyledPilImage, module_drawer = RoundedModuleDrawer(radius_ratio = 1), color_mask = SolidFillColorMask(a.colors['color_five']))
img.save("file.png") #Сохраняем
bot.send_document(message.chat.id, open("file.png", "rb")) #Отправляем
os.remove("file.png") #Удаляем, чтобы не занимало места
#Из файла setting:
colors = {'color_one': ((40, 48, 68), (139, 120, 109)), 'color_two': ((47, 36, 44), (238, 180, 179)), 'color_three': ((84, 86, 67), (241, 222, 222)),
'color_four': ((136, 13, 30), (203, 238, 243)), 'colore_five': ((128, 0, 255), (255, 255, 0))}```
**Ещё интересен вопрос, как обрабатывать сообщения от юзера, которые бот не может никак обработать/ответить. И вообще, бот умирает после пары команд и приходится перезапускать код/бота(в самой телеге), но это иногда не помогает и бот просто встаёт((**
Потому что вот это не помогает:
```@bot.message_handler(content_types=['text'])
def welcome(message):
rand = random.randint(0, 5)
if message.text.lower() == 'привет':
bot.send_message(message.chat.id, a.ans_hello[rand])
elif message.text.lower() == 'как дела' or message.text.lower() == 'как дела?':
bot.send_message(message.chat.id, a.ans_howareu[rand])
elif message.text.lower() == 'что делаешь' or message.text.lower() == 'что делаешь?':
bot.send_message(message.chat.id, a.ans_whatdoudo[rand])
else:
bot.send_message(message.chat.id, "*Бот учится, чтобы отвечать на это :(*", parse_mode="Markdown")
bot.register_next_step_handler(message, welcome)```