예제 #1
0
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
예제 #2
0
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')
예제 #3
0
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')
예제 #4
0
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')
예제 #5
0
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')
예제 #6
0
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')
예제 #7
0
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')
예제 #8
0
def start_message(message):
    bot.send_message(message.chat.id,
                     mk_b('Привет, давай начнем! Выбери действие из списка'),
                     reply_markup=menus.start_menu_markup,
                     parse_mode='HTML')