def file(message): if message.content_type == 'document': if message.document.mime_type in ('image/png', 'image/jpeg'): file_ = bot.get_file(message.document.file_id) downloaded_file = bot.download_file(file_.file_path) bot.send_message(message.chat.id, mk_b('Обрабатываю...'), parse_mode='HTML') original_image = Image.open(BytesIO(downloaded_file)) qr_codes = get_all_qr_codes(original_image) if qr_codes: existed_coupons = save_coupons(original_image, message.chat.id, qr_codes) if existed_coupons: bot.send_message( message.chat.id, '\n'.join([ mk_b(f'Талон с номером {mk_u(c)} уже существует.') for c in existed_coupons ]), parse_mode='HTML') summary_message = get_summary_message(message.chat.id) bot.send_message(message.chat.id, mk_b(summary_message), reply_markup=start_menu_markup, parse_mode='HTML') else: bot.send_message(message.chat.id, mk_b('В файле не найдены талоны.'), parse_mode='HTML') else: pass
def mark_coupon_used(call, coupon_number: str, bot, get_next=False): print('Executed callback "mark_coupon_used" | {}'.format( datetime.datetime.now())) coupon = get_coupon_obj(call.message.chat.id, coupon_number) already_used = coupon.used if already_used: bot.send_message( call.message.chat.id, mk_b(f'Талон {mk_u(coupon_number)}\nуже помечен использованным'), reply_markup=start_menu_markup if not get_next else None, parse_mode='HTML') else: mark_coupon(call.message.chat.id, coupon_number, mark=True) markup = InlineKeyboardMarkup() markup.row( InlineKeyboardButton( 'Отменить пометку', callback_data=f'cancel_mark_coupon:{coupon_number}')) bot.send_message( call.message.chat.id, mk_b(f'Талон {mk_u(coupon_number)}\nотмечен использованным'), reply_markup=markup, parse_mode='HTML') if get_next: get_coupon(call, bot) else: bot.send_message(call.message.chat.id, mk_b('Выберите действие:'), reply_markup=start_menu_markup, parse_mode='HTML')
def get_coupon(call, bot): print('Executed callback "get_coupon" | {}'.format( datetime.datetime.now())) qr_coupon = get_unused_coupon(call.message.chat.id) if qr_coupon: create_png_and_send(call, qr_coupon, bot) else: bot.send_message(call.message.chat.id, mk_b('Нет доступных талонов'), parse_mode='HTML') bot.send_message(call.message.chat.id, mk_b('Выберите действие:'), reply_markup=start_menu_markup, parse_mode='HTML')
def upload_coupons(call, bot): print('Executed callback "upload_coupons" | {}'.format( datetime.datetime.now())) bot.send_message( call.message.chat.id, mk_b( 'Отлично. Прикрепите изображение с талонами. Допустимые форматы: png, jpg' ), parse_mode='HTML')
def get_all_coupons(call, bot): print('Executed callback "get_all_coupons" | {}'.format( datetime.datetime.now())) all_coupons = get_unused_coupons(call.message.chat.id) if len(all_coupons): for coupon in all_coupons: create_png_and_send(call, coupon, bot) else: bot.send_message(call.message.chat.id, mk_b('Нет доступных талонов.\n' 'Загрузите новые талоны прикрепив файл.'), parse_mode='HTML')
def cancel_mark_coupon_used(call, coupon_number: str, bot): print('Executed callback "cancel_mark_coupon_used" | {}'.format( datetime.datetime.now())) coupon = get_coupon_obj(call.message.chat.id, coupon_number) used = coupon.used if used: mark_coupon(call.message.chat.id, coupon_number, mark=False) bot.send_message( call.message.chat.id, mk_b(f'Талон {mk_u(coupon_number)}\nотмечен неиспользованным'), reply_markup=start_menu_markup, parse_mode='HTML') else: bot.send_message( call.message.chat.id, mk_b( f'Невозможно отменить пометку,\nтак как талон {mk_u(coupon_number)}\nне использованный.' ), reply_markup=start_menu_markup, parse_mode='HTML')
def create_png_and_send(call, coupon: QRCodeCoupon, bot): png = create_png(coupon.qr_bytes) markup = InlineKeyboardMarkup() markup.row( InlineKeyboardButton( 'Пометить использованным', callback_data=f'mark_coupon:{coupon.coupon_number}', )) markup.row( InlineKeyboardButton( 'Пометить и получить еще талон', callback_data=f'mark_coupon:{coupon.coupon_number}:next')) bot.send_photo( call.message.chat.id, photo=png.getvalue(), reply_markup=markup, caption=mk_b( f'{mk_u(coupon.coupon_number)}\nДействителен до {coupon.expiry_date.strftime("%d/%m/%Y") if coupon.expiry_date else "Неизвестно"}' ), parse_mode='HTML')
def start_message(message): bot.send_message(message.chat.id, mk_b('Привет, давай начнем! Выбери действие из списка'), reply_markup=menus.start_menu_markup, parse_mode='HTML')