Example #1
0
def hour_callback(update: Update, context: CallbackContext):
    callback_query = update.callback_query
    data = callback_query.data

    user_data = context.user_data
    user = user_data['user_data']

    if data == 'next_btn' or data == 'back_btn':

        if data == 'next_btn':
            inline_keyboard = InlineKeyboard(hours_keyboard,
                                             user[LANG],
                                             begin=18,
                                             end=29).get_keyboard()

        if data == 'back_btn':
            inline_keyboard = InlineKeyboard(hours_keyboard,
                                             user[LANG],
                                             begin=6,
                                             end=17).get_keyboard()

        callback_query.edit_message_reply_markup(inline_keyboard)

        state = user_data[USER_INPUT_DATA][STATE]

    else:

        user_data[USER_INPUT_DATA][TIME] = data
        phone_number_layout = get_phone_number_layout(user[LANG])

        if user[LANG] == LANGS[0]:
            edit_text = "Siz bilan bog'lanish uchun raqamingizni yuboring\n\n"

        if user[LANG] == LANGS[1]:
            edit_text = 'Отправьте свой номер для связи с вами\n\n'

        if user[LANG] == LANGS[2]:
            edit_text = "Сиз билан боғланиш учун рақамингизни юборинг\n\n"

        reply_text = phone_number_layout

        callback_query.edit_message_text(edit_text)
        logger.info('user_input_data: %s', user_data[USER_INPUT_DATA])

        reply_keyboard = ReplyKeyboard(phone_number_keyboard,
                                       user[LANG]).get_keyboard()
        callback_query.message.reply_html(reply_text,
                                          reply_markup=reply_keyboard)

        state = USER_PHONE_NUMBER

        user_data[USER_INPUT_DATA][STATE] = state

    callback_query.answer()
    return state
Example #2
0
def cargo_photo_callback(update: Update, context: CallbackContext):
    # with open('jsons/update.json', 'w') as update_file:
    #     update_file.write(update.to_json())
    user_data = context.user_data
    user = user_data['user_data']

    cargo_photo = update.message.photo

    if not cargo_photo:

        if user[LANG] == LANGS[0]:
            error_text = "Yuk rasmi yuborilmadi !\n" \
                         "Yuk rasmini yuboring:\n\n" \
                         "Yoki bu bosqichni o'tkazib yuborish uchun \U000027A1 ni bosing"

        if user[LANG] == LANGS[1]:
            error_text = "Фотография груза не отправлено !\n" \
                         "Отправите фотография груза:\n\n" \
                         "Или нажмите \U000027A1, чтобы пропустить этот шаг"

        if user[LANG] == LANGS[2]:
            error_text = "Юк расми юборилмади !\n" \
                         "Юк расмини юборинг:\n\n" \
                         "Ёки бу босқични ўтказиб юбориш учун \U000027A1 ни босинг"

        error_text = '\U000026A0 ' + error_text

        update.message.reply_text(error_text, quote=True)

        state = user_data[USER_INPUT_DATA][STATE]

    else:

        user_data[USER_INPUT_DATA][PHOTO] = cargo_photo[-1].to_dict()

        if user[LANG] == LANGS[0]:
            text = "Yukni jo'natish kunini belgilang"

        if user[LANG] == LANGS[1]:
            text = 'Установите дату доставки'

        if user[LANG] == LANGS[2]:
            text = "Юкни жўнатиш кунини белгиланг"

        text = f'{text} :'

        inline_keyboard = InlineKeyboard(dates_keyboard,
                                         user[LANG]).get_keyboard()

        context.bot.edit_message_reply_markup(
            update.effective_chat.id,
            user_data[USER_INPUT_DATA].pop(MESSAGE_ID))
        message = update.message.reply_text(text, reply_markup=inline_keyboard)

        state = DATE

        user_data[USER_INPUT_DATA][STATE] = state
        user_data[USER_INPUT_DATA][MESSAGE_ID] = message.message_id

    return state
Example #3
0
def command_callback(updata: Update, context: CallbackContext):
    user_data = context.user_data
    set_user_data(updata.effective_user.id, user_data)
    user = user_data['user_data']

    if user:
        inline_keyboard = InlineKeyboard(
            'program_langs_keyboard').get_keyboard()

        if user['lang'] == LANGS[0]:
            text = 'Dasturlash tilini tanlang'
        else:
            text = 'Дастурлаш тилини танланг'

        text = f'{text} :'
        message = updata.message.reply_text(text, reply_markup=inline_keyboard)

        state = CHOOSE_PROGRAM_LANG

        user_data['user_input_data'] = dict()
        user_data['user_input_data']['status'] = state
        user_data['user_input_data']['user_tg_id'] = user['tg_id']
        user_data['user_input_data']['message_id'] = message.message_id

        return state
Example #4
0
def to_region_callback(update: Update, context: CallbackContext):
    callback_query = update.callback_query
    region_id = callback_query.data

    user_data = context.user_data
    user = user_data['user_data']

    user_data[USER_INPUT_DATA][TO_REGION] = region_id

    logger.info('new_cargo_info: %s', user_data[USER_INPUT_DATA])

    if user[LANG] == LANGS[0]:
        text = "Qayerga (Tumanni tanlang)"

    if user[LANG] == LANGS[1]:
        text = "Куда (Выберите район)"

    if user[LANG] == LANGS[2]:
        text = "Қаерга (Туманни танланг)"

    text = f'{text} :'

    callback_query.answer()

    inline_keyboard = InlineKeyboard(districts_keyboard, user[LANG],
                                     region_id).get_keyboard()
    callback_query.edit_message_text(text, reply_markup=inline_keyboard)

    state = TO_DISTRICT
    user_data[USER_INPUT_DATA][STATE] = state

    return state
Example #5
0
def change_name_callback(update: Update, context: CallbackContext):
    user_data = context.user_data
    set_user_data(update.effective_user.id, user_data)
    user = user_data['user_data']

    name = update.message.text

    if name == '/cancel' or name == '/menu' or name == '/start':

        if user[LANG] == LANGS[0]:
            text = "Ismni o'zgartirish bekor qilindi"

        if user[LANG] == LANGS[1]:
            text = 'Смена имени отменена'

        if user[LANG] == LANGS[2]:
            text = "Исмни ўзгартириш бекор қилинди"

        text = f'\U0000274C {text} !'

    else:

        result = update_user_info(user[TG_ID], name=name)

        if result == 'updated':

            user_data['user_data'][NAME] = name

            if user[LANG] == LANGS[0]:
                text = "Ismingiz o'zgartirildi"

            if user[LANG] == LANGS[1]:
                text = "Ваше имя изменено"

            if user[LANG] == LANGS[2]:
                text = "Исмингиз ўзгартирилди"

            text = f'\U00002705 {text} !'

        elif result == 'not updated':

            if user[LANG] == LANGS[0]:
                text = "Ismingiz o'zgartirilmadi"

            if user[LANG] == LANGS[1]:
                text = 'Ваше имя не было изменено'

            if user[LANG] == LANGS[2]:
                text = "Исмингиз ўзгартирилмади"

            text = f'\U000026A0 {text} !'

    update.message.reply_text(text)

    inline_keyboard = InlineKeyboard(user_data_keyboard,
                                     user[LANG]).get_keyboard()
    update.message.reply_html(get_user_info_layout(user),
                              reply_markup=inline_keyboard)

    return ConversationHandler.END
Example #6
0
def to_district_callback(update: Update, context: CallbackContext):
    # with open('jsons/update.json', 'w') as update_file:
    #     update_file.write(update.to_json())
    callback_query = update.callback_query
    data = callback_query.data

    user_data = context.user_data
    user = user_data['user_data']

    if data == BUTTONS_DATA_DICT[6]:

        if user[LANG] == LANGS[0]:
            text = "Yukni jo'natish manzilini tanlang (Viloyatni tanlang)"

        if user[LANG] == LANGS[1]:
            text = "Выберите адрес доставки (Выберите область)"

        if user[LANG] == LANGS[2]:
            text = "Юкни жўнатиш манзилини танланг (Вилоятни танланг)"

        text = f'{text} :'

        inline_keyboard = InlineKeyboard(regions_keyboard,
                                         user[LANG]).get_keyboard()
        callback_query.edit_message_text(text, reply_markup=inline_keyboard)

        state = TO_REGION

    else:

        user_data[USER_INPUT_DATA][TO_DISTRICT] = data

        logger.info('new_cargo_info: %s', user_data[USER_INPUT_DATA])

        if user[LANG] == LANGS[0]:
            text = "Yukni jo'natish geolokatsiyasini yuboring\n\n" \
                   "Yoki bu bosqichni o'tkazib yuborish uchun \U000027A1 ni bosing"

        if user[LANG] == LANGS[1]:
            text = "Отправите геолокацию доставки\n\n" \
                   "Или нажмите \U000027A1, чтобы пропустить этот шаг"

        if user[LANG] == LANGS[2]:
            text = "Юкни жўнатиш геолокациясини юборинг\n\n" \
                   "Ёки бу босқични ўтказиб юбориш учун \U000027A1 ни босинг"

        state = TO_LOCATION

        callback_query.edit_message_text(text,
                                         reply_markup=get_skip_keyboard(state))

    callback_query.answer()
    user_data[USER_INPUT_DATA][STATE] = state

    return state
def message_handler_callback(update: Update, context: CallbackContext):
    user_data = context.user_data
    set_user_data(update.effective_user.id, user_data)
    user = user_data['user_data']

    if user:

        inline_keyboard = InlineKeyboard(
            'program_langs_keyboard').get_keyboard()

        if user['lang'] == LANGS[0]:
            text = 'Dasturlash tili tanlang'
        else:
            text = 'Дастурлаш тили танланг'

        update.message.reply_text(text, reply_markup=inline_keyboard)
    else:
        text = 'Tilni tanlang\nТилни танланг'
        inline_keyboard = InlineKeyboard('langs_keyboard').get_keyboard()

        update.message.reply_text(text,
                                  reply_markup=inline_keyboard,
                                  quote=True)
def start_handler_callback(update: Update, context: CallbackContext):
    user_data = context.user_data
    set_user_data(update.effective_user.id, user_data)
    user = user_data['user_data']

    if user:
        if 'user_input_data' not in user_data:

            if user['lang'] == LANGS[0]:
                text = "Robocontest.uz saytining kompilyator botiga xush kelibsiz !\n" \
                       "Dasturlash tillarini ko'rish uchun /languages ni bosing"
            else:
                text = 'Robocontest.uz сайтининг компилятор ботига хуш келибсиз !\n' \
                       'Дастурлаш тилларини кўриш учун /languages ни босинг'

            text = f'\U0001F917    {text}'
            update.message.reply_text(text)
    else:

        text = 'Tilni tanlang\nТилни танланг'
        inline_keyboard = InlineKeyboard('langs_keyboard').get_keyboard()

        update.message.reply_text(text, reply_markup=inline_keyboard)
Example #9
0
def input_callback(updata: Update, context: CallbackContext):
    user_data = context.user_data
    user = user_data['user_data']

    input = updata.message.text.strip()
    user_data['user_input_data']['input'] = input

    inline_keyboard = InlineKeyboard('confirm_keyboard',
                                     lang=user['lang']).get_keyboard()

    if user['lang'] == LANGS[0]:
        input_text = "Kirivchi ma'lumotlar(input)"
        code_text = 'Kod'
    else:
        input_text = "Киривчи маълумотлар (input)"
        code_text = 'Код'

    code = user_data["user_input_data"]["code"]
    code = code.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;')

    text = f'{code_text}:\n' \
           f'----------\n' \
           f'{code}\n' \
           f'----------\n' \
           f'{input_text}:\n{user_data["user_input_data"]["input"]}'

    text = f'<code>{text}</code>'
    message = updata.message.reply_text(text,
                                        reply_markup=inline_keyboard,
                                        parse_mode=ParseMode.HTML)

    state = CONFIRMATION
    user_data['user_input_data']['status'] = state
    user_data['user_input_data']['message_id'] = message.message_id

    return state
def edit_district_callback(update: Update, context: CallbackContext):
    callback_query = update.callback_query
    data = callback_query.data

    user_data = context.user_data
    user = user_data['user_data']

    if data == 'back_btn':

        if user[LANG] == LANGS[0]:
            button1_text = "Viloyatni tahrirlash"
            button2_text = "Tumanni tahrirlash"
            button3_text = "Ortga"

        if user[LANG] == LANGS[1]:
            button1_text = "Изменить область"
            button2_text = "Изменить район"
            button3_text = "Назад"

        if user[LANG] == LANGS[2]:
            button1_text = "Вилоятни таҳрирлаш"
            button2_text = "Туманни таҳрирлаш"
            button3_text = "Ортга"

        button3_text = '« ' + button3_text

        inline_keyboard = InlineKeyboardMarkup([
            [
                InlineKeyboardButton(button1_text, callback_data='edit_region'),
                InlineKeyboardButton(button2_text, callback_data='edit_district')
            ],
            [
                InlineKeyboardButton(button3_text, callback_data='back')
            ]
        ])

        state = user_data[USER_INPUT_DATA][STATE]
        answer = None

        if state == 'edit_from_address':
            key = 'new_from_region'

        elif state == 'edit_to_address':
            key = 'new_to_region'

        if key in user_data[USER_INPUT_DATA].keys():
            user_data[USER_INPUT_DATA].pop(key)

        layout = get_new_cargo_layout(user_data[USER_INPUT_DATA], user[LANG])

        if user_data[USER_INPUT_DATA][PHOTO]:
            callback_query.edit_message_caption(layout, reply_markup=inline_keyboard, parse_mode=ParseMode.HTML)
        else:
            callback_query.edit_message_text(layout, reply_markup=inline_keyboard, parse_mode=ParseMode.HTML)

    else:

        district_id = data

        state = user_data[USER_INPUT_DATA][STATE]

        if state == 'edit_from_address':

            new_key = 'new_from_region'
            key = FROM_REGION
            user_data[USER_INPUT_DATA][FROM_DISTRICT] = district_id

            if user[LANG] == LANGS[0]:
                answer = "Yuboruvchi manzili tahrirlandi"

            if user[LANG] == LANGS[1]:
                answer = "Адрес отправителя изменен"

            if user[LANG] == LANGS[2]:
                answer = "Юборувчи манзили таҳрирланди"

        if state == 'edit_to_address':

            new_key = 'new_to_region'
            key = TO_REGION
            user_data[USER_INPUT_DATA][TO_DISTRICT] = district_id

            if user[LANG] == LANGS[0]:
                answer = "Qabul qiluvchi manzili tahrirlandi"

            if user[LANG] == LANGS[1]:
                answer = "Адрес получателя изменен"

            if user[LANG] == LANGS[2]:
                answer = "Қабул қилувчи манзили таҳрирланди"

        answer = '\U0001F44F\U0001F44F\U0001F44F ' + answer

        if new_key in user_data[USER_INPUT_DATA].keys():
            user_data[USER_INPUT_DATA][key] = user_data[USER_INPUT_DATA].pop(new_key)

        layout = get_new_cargo_layout(user_data[USER_INPUT_DATA], user[LANG])
        inline_keyboard = InlineKeyboard('edit_keyboard', user[LANG]).get_keyboard()

        if user_data[USER_INPUT_DATA][PHOTO]:
            callback_query.edit_message_caption(layout, reply_markup=inline_keyboard, parse_mode=ParseMode.HTML)
        else:
            callback_query.edit_message_text(layout, reply_markup=inline_keyboard, parse_mode=ParseMode.HTML)

        state = 'edit'
        user_data[USER_INPUT_DATA][STATE] = state

    callback_query.answer(answer)

    return state
def edit_region_callback(update: Update, context: CallbackContext):
    callback_query = update.callback_query
    data = callback_query.data

    user_data = context.user_data
    user = user_data['user_data']

    if data == 'back':
        layout = get_new_cargo_layout(user_data[USER_INPUT_DATA], user[LANG])

        if user[LANG] == LANGS[0]:
            button1_text = "Viloyatni tahrirlash"
            button2_text = "Tumanni tahrirlash"
            button3_text = "Ortga"

        if user[LANG] == LANGS[1]:
            button1_text = "Изменить область"
            button2_text = "Изменить район"
            button3_text = "Назад"

        if user[LANG] == LANGS[2]:
            button1_text = "Вилоятни таҳрирлаш"
            button2_text = "Туманни таҳрирлаш"
            button3_text = "Ортга"

        button3_text = '« ' + button3_text

        inline_keyboard = InlineKeyboardMarkup([
            [
                InlineKeyboardButton(button1_text, callback_data='edit_region'),
                InlineKeyboardButton(button2_text, callback_data='edit_district')
            ],
            [
                InlineKeyboardButton(button3_text, callback_data='back')
            ]
        ])

        callback_query.answer()

        if user_data[USER_INPUT_DATA][PHOTO]:
            callback_query.edit_message_caption(layout, reply_markup=inline_keyboard, parse_mode=ParseMode.HTML)
        else:
            callback_query.edit_message_text(layout, reply_markup=inline_keyboard, parse_mode=ParseMode.HTML)

        return user_data[USER_INPUT_DATA][STATE]

    region_id = data

    if user_data[USER_INPUT_DATA][STATE] == 'edit_from_address':
        user_data[USER_INPUT_DATA]['new_from_region'] = region_id

    if user_data[USER_INPUT_DATA][STATE] == 'edit_to_address':
        user_data[USER_INPUT_DATA]['new_to_region'] = region_id

    # logger.info('new_cargo_info: %s', user_data[USER_INPUT_DATA])

    callback_query.answer()

    inline_keyboard = InlineKeyboard(districts_keyboard, user[LANG], region_id=region_id).get_keyboard()
    callback_query.edit_message_reply_markup(reply_markup=inline_keyboard)

    return 'edit_district'
def edit_region_or_district_callback(update: Update, context: CallbackContext):
    callback_query = update.callback_query
    data = callback_query.data

    user_data = context.user_data
    user = user_data['user_data']

    if data == 'back':
        inline_keyboard = InlineKeyboard(edit_address_keyboard, user[LANG]).get_keyboard()
        text = get_new_cargo_layout(user_data[USER_INPUT_DATA], user[LANG])

        state = 'edit_address'
        user_data[USER_INPUT_DATA][STATE] = state

    if data == 'edit_region':

        if user[LANG] == LANGS[0]:
            buton_text = "Ortga"
            text = "Viloyatni tanlang"

        if user[LANG] == LANGS[1]:
            buton_text = "Назад"
            text = "Выберите область"

        if user[LANG] == LANGS[2]:
            buton_text = "Ортга"
            text = "Вилоятни танланг"

        text = f'{text} :'
        buton_text = '« ' + buton_text

        inline_keyboard = InlineKeyboard(regions_keyboard, user[LANG]).get_keyboard()
        inline_keyboard['inline_keyboard'].append([InlineKeyboardButton(buton_text, callback_data='back')])

        state = 'edit_region'

    if data == 'edit_district':

        if user[LANG] == LANGS[0]:
            text = "Tumanni tanlang"

        if user[LANG] == LANGS[1]:
            text = "Выберите район"

        if user[LANG] == LANGS[2]:
            text = "Туманни танланг"

        text = f'{text} :'

        if user_data[USER_INPUT_DATA][STATE] == 'edit_from_address':
            region_id = user_data[USER_INPUT_DATA][FROM_REGION]

        elif user_data[USER_INPUT_DATA][STATE] == 'edit_to_address':
            region_id = user_data[USER_INPUT_DATA][TO_REGION]

        inline_keyboard = InlineKeyboard(districts_keyboard, user[LANG], region_id=region_id).get_keyboard()

        state = 'edit_district'

    callback_query.answer()

    if user_data[USER_INPUT_DATA][PHOTO]:
        callback_query.edit_message_caption(text, reply_markup=inline_keyboard, parse_mode=ParseMode.HTML)
    else:
        callback_query.edit_message_text(text, reply_markup=inline_keyboard, parse_mode=ParseMode.HTML)

    return state
def edit_address_callback(update: Update, context: CallbackContext):
    callback_query = update.callback_query
    data = callback_query.data

    user_data = context.user_data
    user = user_data['user_data']

    if data == 'back':
        inline_keyboard = InlineKeyboard(edit_keyboard, user[LANG]).get_keyboard()

        state = 'edit'
        user_data[USER_INPUT_DATA][STATE] = state

    if data == 'edit_from_address' or data == 'edit_to_address':

        if user[LANG] == LANGS[0]:
            button1_text = "Viloyatni tahrirlash"
            button2_text = "Tumanni tahrirlash"
            button3_text = "Ortga"

        if user[LANG] == LANGS[1]:
            button1_text = "Изменить область"
            button2_text = "Изменить район"
            button3_text = "Назад"

        if user[LANG] == LANGS[2]:
            button1_text = "Вилоятни таҳрирлаш"
            button2_text = "Туманни таҳрирлаш"
            button3_text = "Ортга"

        button3_text = '« ' + button3_text

        inline_keyboard = InlineKeyboardMarkup([
            [
                InlineKeyboardButton(button1_text, callback_data='edit_region'),
                InlineKeyboardButton(button2_text, callback_data='edit_district')
            ],

            [InlineKeyboardButton(button3_text, callback_data='back')]
        ])

        if data == 'edit_from_address':
            state = 'edit_from_address'

        if data == 'edit_to_address':
            state = 'edit_to_address'

        user_data[USER_INPUT_DATA][STATE] = state

    if data == 'edit_from_location':

        if user[LANG] == LANGS[0]:
            button1_text = "Geolokatsiyamni jo'natish"
            button2_text = "Ortga"
            button3_text = "Eski geolokatsiyamni o'chirish"
            text = "Geolokatsiyangizni yuboring:\n\n" \
                   "Yoki eskisini o'chirish uchun «o'chirish» ni bosing"

        if user[LANG] == LANGS[1]:
            button1_text = "Отправить мою геолокацию"
            button2_text = "Назад"
            button3_text = "Удалить мою старую геолокацию"
            text = "Отправьте свою геолокацию:\n\n" \
                   "Или нажмите «удалить», чтобы удалить старую"

        if user[LANG] == LANGS[2]:
            button1_text = "Геолокациямни жўнатиш"
            button2_text = "Ортга"
            button3_text = "Ески геолокациямни ўчириш"
            text = "Геолокациянгизни юборинг:\n\n" \
                   "Ёки ескисини ўчириш учун «ўчириш» ни босинг"

        button1_text = '\U0001F4CD ' + button1_text
        button2_text = '« ' + button2_text
        button3_text = f'«{button3_text}»'

        if not user_data[USER_INPUT_DATA][FROM_LOCATION]:

            reply_keyboard = ReplyKeyboardMarkup([
                [KeyboardButton(button1_text, request_location=True)],
                [KeyboardButton(button2_text)]
            ], resize_keyboard=True)

            text = text.partition(':')
            text = text[0] + text[1]

        else:

            reply_keyboard = ReplyKeyboardMarkup([
                [KeyboardButton(button1_text, request_location=True)],
                [KeyboardButton(button3_text)],
                [KeyboardButton(button2_text)]
            ], resize_keyboard=True)

        context.bot.edit_message_reply_markup(update.effective_chat.id, user_data[USER_INPUT_DATA].pop('message_id'))
        callback_query.message.reply_text(text, reply_markup=reply_keyboard)

        state = 'edit_from_location'
        user_data[USER_INPUT_DATA][STATE] = state

        return state

    if data == 'edit_to_location':

        if user[LANG] == LANGS[0]:
            button1_text = "Eski geolokatsiyani o'chirish"
            button2_text = "Ortga"
            text = "Yukni jo'natish geolokatsiyasini yuboring:\n\n " \
                   "Yoki eskisini o'chirish uchun «o'chirish» ni bosing"

        if user[LANG] == LANGS[1]:
            button1_text = "Удалить старую геолокацию"
            button2_text = "Назад"
            text = "Отправите геолокацию доставки:\n\n" \
                   "Или нажмите «удалить», чтобы удалить старую"

        if user[LANG] == LANGS[2]:
            button1_text = "Ески геолокацияни ўчириш"
            button2_text = "Ортга"
            text = "Юкни жўнатиш геолокациясини юборинг:\n\n" \
                   "Ёки ескисини ўчириш учун «ўчириш» ни босинг"

        button1_text = f'«{button1_text}»'
        button2_text = '« ' + button2_text

        if not user_data[USER_INPUT_DATA]['to_location']:

            inline_keyboard = InlineKeyboardMarkup([
                [InlineKeyboardButton(button2_text, callback_data='back')]
            ])

            text = text.partition(':')
            text = text[0] + text[1]

        else:
            inline_keyboard = InlineKeyboardMarkup([
                [InlineKeyboardButton(button1_text, callback_data='delete')],
                [InlineKeyboardButton(button2_text, callback_data='back')]
            ])

        callback_query.answer()

        if user_data[USER_INPUT_DATA][PHOTO]:
            callback_query.edit_message_caption(text, reply_markup=inline_keyboard)
        else:
            callback_query.edit_message_text(text, reply_markup=inline_keyboard)

        state = 'edit_to_location'
        user_data[USER_INPUT_DATA][STATE] = state

        return state

    callback_query.answer()
    callback_query.edit_message_reply_markup(inline_keyboard)
    return state
def edit_hour_callback(update: Update, context: CallbackContext):
    callback_query = update.callback_query
    data = callback_query.data

    user_data = context.user_data
    user = user_data['user_data']

    if data == 'back_btn' or data == 'next_btn' or data == 'back':

        if user[LANG] == LANGS[0]:
            button_text = "Ortga"

        if user[LANG] == LANGS[1]:
            button_text = "Назад"

        if user[LANG] == LANGS[2]:
            button_text = "Ортга"

        button_text = f'« {button_text}'

        if data == 'back':
            user_data[USER_INPUT_DATA].pop('new_date')

            inline_keyboard = InlineKeyboard(dates_keyboard,
                                             user[LANG]).get_keyboard()
            inline_keyboard['inline_keyboard'].append(
                [InlineKeyboardButton(button_text, callback_data='back')])

            state = 'edit_date_and_time'

        if data == 'next_btn' or data == 'back_btn':

            if data == 'next_btn':
                inline_keyboard = InlineKeyboard(hours_keyboard,
                                                 user[LANG],
                                                 begin=18,
                                                 end=29).get_keyboard()

            if data == 'back_btn':
                inline_keyboard = InlineKeyboard(hours_keyboard,
                                                 user[LANG],
                                                 begin=6,
                                                 end=17).get_keyboard()
                inline_keyboard['inline_keyboard'].append(
                    [InlineKeyboardButton(button_text, callback_data='back')])

            state = user_data[USER_INPUT_DATA][STATE]

        callback_query.answer()
        callback_query.edit_message_reply_markup(inline_keyboard)

        user_data[USER_INPUT_DATA][STATE] = state
        return state

    else:

        if user[LANG] == LANGS[0]:
            answer = "Kun va vaqt tahrirlandi"

        if user[LANG] == LANGS[1]:
            answer = "Дата и время изменены"

        if user[LANG] == LANGS[2]:
            answer = "Кун ва вақт таҳрирланди"

        answer = f'\U0001F44F\U0001F44F\U0001F44F {answer}'
        callback_query.answer(answer)

        user_data[USER_INPUT_DATA][TIME] = data
        user_data[USER_INPUT_DATA][DATE] = user_data[USER_INPUT_DATA].pop(
            'new_date')

        layout = get_new_cargo_layout(user_data[USER_INPUT_DATA], user[LANG])
        inline_keyboard = InlineKeyboard(edit_keyboard,
                                         user[LANG]).get_keyboard()

        if user_data[USER_INPUT_DATA][PHOTO]:
            callback_query.edit_message_caption(layout,
                                                reply_markup=inline_keyboard,
                                                parse_mode=ParseMode.HTML)

        else:
            callback_query.edit_message_text(layout,
                                             reply_markup=inline_keyboard,
                                             parse_mode=ParseMode.HTML)

        state = 'edit'
        user_data[USER_INPUT_DATA][STATE] = state

        return state
Example #15
0
def new_cargo_callback(update: Update, context: CallbackContext):
    user_data = context.user_data
    set_user_data(update.effective_user.id, user_data)
    user = user_data['user_data']
    user_data[USER_INPUT_DATA] = dict()

    callback_query = update.callback_query

    if callback_query:
        # print(callback_query.data)
        cargo_id = int(callback_query.data.split('_')[0])
        cargo_data = get_cargo_by_id(cargo_id)

        cargo_data[USERNAME] = user[USERNAME]
        cargo_data[NAME] = user[NAME]
        cargo_data[SURNAME] = user[SURNAME]
        cargo_data[STATE] = CONFIRMATION
        cargo_data.pop('shipping_datetime')
        cargo_data.pop('id')
        cargo_data.pop('created_at')
        cargo_data.pop('updated_at')
        cargo_data[DATE] = datetime.datetime.now().strftime('%d-%m-%Y')
        cargo_data[TIME] = 'now'
        cargo_data[PHOTO] = cargo_data[FROM_LOCATION] = cargo_data[
            TO_LOCATION] = None

        if cargo_data['photo_id']:
            cargo_data[PHOTO] = {
                'file_id': cargo_data.pop('photo_id'),
                'width': cargo_data.pop('photo_width'),
                'height': cargo_data.pop('photo_height'),
                'file_size': cargo_data.pop('photo_size')
            }

        if cargo_data['from_longitude']:
            cargo_data[FROM_LOCATION] = {
                'longitude': cargo_data.pop('from_longitude'),
                'latitude': cargo_data.pop('from_latitude')
            }

        if cargo_data['to_longitude']:
            cargo_data[TO_LOCATION] = {
                'longitude': cargo_data.pop('to_longitude'),
                'latitude': cargo_data.pop('to_latitude')
            }

        edit_text = inline_keyboard_types[paginate_keyboard][user[LANG]][1]
        callback_query.edit_message_text(edit_text)

        reply_text = inline_keyboard_types[paginate_keyboard][user[LANG]][2]
        reply_text += '\n\U0001F447\U0001F447\U0001F447'
        callback_query.message.reply_text(reply_text,
                                          reply_markup=ReplyKeyboardRemove())

        layout = get_new_cargo_layout(cargo_data, user[LANG])
        inline_keyboard = InlineKeyboard(confirm_keyboard,
                                         user[LANG],
                                         data=cargo_data).get_keyboard()

        if cargo_data[PHOTO]:
            message = callback_query.message.reply_photo(
                cargo_data[PHOTO].get('file_id'),
                layout,
                reply_markup=inline_keyboard,
                parse_mode=ParseMode.HTML)
        else:
            message = callback_query.message.reply_html(
                layout, reply_markup=inline_keyboard)

        cargo_data[MESSAGE_ID] = message.message_id
        user_data[USER_INPUT_DATA].update(cargo_data)

        return CONFIRMATION

    else:
        text = update.message.text.split(' ', 1)[-1]

        if text == reply_keyboard_types[menu_keyboard][user[LANG]][1]:

            if user[LANG] == LANGS[0]:
                text = "Qayerdan (Viloyatni tanlang)"

            if user[LANG] == LANGS[1]:
                text = "Откуда (Выберите область)"

            if user[LANG] == LANGS[2]:
                text = "Қаердан (Вилоятни танланг)"

            text = f'{text} :'
            update.message.reply_text(update.message.text,
                                      reply_markup=ReplyKeyboardRemove())

            inline_keyboard = InlineKeyboard(regions_keyboard,
                                             user[LANG]).get_keyboard()
            message = update.message.reply_text(text,
                                                reply_markup=inline_keyboard)

            state = FROM_REGION

            user_data[USER_INPUT_DATA][STATE] = state
            user_data[USER_INPUT_DATA][USER_ID] = user[ID]
            user_data[USER_INPUT_DATA][USER_TG_ID] = user[TG_ID]
            user_data[USER_INPUT_DATA][USERNAME] = user[USERNAME]
            user_data[USER_INPUT_DATA][NAME] = user[NAME]
            user_data[USER_INPUT_DATA][SURNAME] = user[SURNAME]
            user_data[USER_INPUT_DATA][MESSAGE_ID] = message.message_id

            return state
Example #16
0
def main_inline_keyboard_callback(update: Update, context: CallbackContext):
    # with open('callback_query.json', 'w') as callback_query_file:
    #     callback_query_file.write(callback_query.to_json())
    user_data = context.user_data
    set_user_data(update.effective_user.id, user_data)
    user = user_data['user_data']

    callback_query = update.callback_query
    data = callback_query.data

    match_obj = re.search(r'^(\d+_closed)$', data)
    match_obj_2 = re.search(r'^(w_\d+)$', data)

    if match_obj:

        # print(data)
        data = match_obj.string.split('_')
        cargo_id = int(data[0])
        cargo_status = data[-1]
        return_value = update_cargo_status(cargo_id, cargo_status)

        if return_value == 'updated' or return_value == 'not updated':

            user_data['user_cargoes'] = get_user_cargoes(user[ID])
            cargo_data = get_cargo_by_id(cargo_id)

            shipping_datetime = cargo_data['shipping_datetime']
            cargo_data[DATE] = shipping_datetime.strftime('%d-%m-%Y')
            cargo_data[TIME] = shipping_datetime.strftime('%H:%M')
            cargo_data[FROM_LOCATION] = None
            cargo_data[TO_LOCATION] = None
            cargo_data[NAME] = user[NAME]
            cargo_data[SURNAME] = user[SURNAME]
            cargo_data[USERNAME] = user[USERNAME]

            layout = get_new_cargo_layout(cargo_data, user[LANG])
            layout_2 = get_new_cargo_layout(cargo_data,
                                            'cy',
                                            hide_user_data=True)

            open_text = inline_keyboard_types[paginate_keyboard][user[LANG]][1]
            button4_text = f'{open_text}'
            button4_data = f'{cargo_id}_opened'

            inline_keyboard = callback_query.message.reply_markup
            inline_keyboard['inline_keyboard'][-1][0] = InlineKeyboardButton(
                button4_text, callback_data=button4_data)

            callback_query.answer()
            callback_query.edit_message_text(layout,
                                             parse_mode=ParseMode.HTML,
                                             reply_markup=inline_keyboard)

            if return_value == 'updated':

                if cargo_data['photo_id']:
                    context.bot.edit_message_caption(GROUP_ID,
                                                     cargo_data[POST_ID],
                                                     caption=layout_2,
                                                     parse_mode=ParseMode.HTML)
                else:
                    context.bot.edit_message_text(layout_2,
                                                  GROUP_ID,
                                                  cargo_data[POST_ID],
                                                  parse_mode=ParseMode.HTML)

    elif match_obj_2:

        user_data['user_cargoes'] = get_user_cargoes(user[ID])

        wanted = int(match_obj_2.string.split('_')[-1])
        wanted_cargo_data = user_data['user_cargoes'][wanted - 1]

        shipping_datetime = wanted_cargo_data['shipping_datetime']
        wanted_cargo_data[DATE] = shipping_datetime.strftime('%d-%m-%Y')
        wanted_cargo_data[TIME] = shipping_datetime.strftime('%H:%M')
        wanted_cargo_data[NAME] = user[NAME]
        wanted_cargo_data[SURNAME] = user[SURNAME]
        wanted_cargo_data[USERNAME] = user[USERNAME]

        layout = get_new_cargo_layout(wanted_cargo_data, user[LANG])
        inline_keyboard = InlineKeyboard(
            paginate_keyboard,
            user[LANG],
            data=(wanted, user_data['user_cargoes'])).get_keyboard()
        callback_query.answer()
        callback_query.edit_message_text(layout,
                                         reply_markup=inline_keyboard,
                                         parse_mode=ParseMode.HTML)

    elif data == BUTTONS_DATA_DICT[7] or data == BUTTONS_DATA_DICT[
            8] or data == BUTTONS_DATA_DICT[9]:

        if data == BUTTONS_DATA_DICT[7]:
            lang = LANGS[0]
            text = "Til: O'zbekcha"
            reply_text = "Til o'zgartirildi"
            edited_text = '\U0001F1FA\U0001F1FF'

        elif data == BUTTONS_DATA_DICT[8]:
            lang = LANGS[1]
            text = "Язык: русский"
            reply_text = 'Язык был изменен'
            edited_text = '\U0001F1F7\U0001F1FA'

        elif data == BUTTONS_DATA_DICT[9]:
            lang = LANGS[2]
            text = "Тил: Ўзбекча"
            reply_text = "Тил ўзгартирилди"
            edited_text = '\U0001F1FA\U0001F1FF'

        context.bot.answer_callback_query(callback_query.id, reply_text)

        update_user_info(user[TG_ID], lang=lang)
        user_data['user_data'][LANG] = lang

        reply_keyboard = ReplyKeyboard(menu_keyboard, lang).get_keyboard()
        callback_query.edit_message_text(edited_text)
        callback_query.message.reply_text(text, reply_markup=reply_keyboard)

    else:
        callback_query.answer()
def message_handler_callback(update: Update, context: CallbackContext):
    # with open('jsons/update.json', 'w') as update_file:
    #     update_file.write(update.to_json())
    user_data = context.user_data
    set_user_data(update.effective_user.id, user_data)
    user = user_data['user_data']

    full_text = update.message.text
    text = full_text.split(' ', 1)[-1]

    if user:

        if text == reply_keyboard_types[menu_keyboard][user[LANG]][3]:

            if user[LANG] == LANGS[0]:
                reply_text = "Sizda hali e'lonlar mavjud emas"

            if user[LANG] == LANGS[1]:
                reply_text = "У вас нет объявлений пока"

            if user[LANG] == LANGS[2]:
                reply_text = "Сизда ҳали эълонлар мавжуд емас"

            reply_text = f'\U0001F615 {reply_text}'
            inline_keyboard = None

            user_cargoes = get_user_cargoes(user[TG_ID])

            if len(user_cargoes) > 0:
                user_data['user_cargoes'] = user_cargoes

                wanted = 1
                wanted_cargo_data = user_cargoes[wanted - 1]

                shipping_datetime = wanted_cargo_data['shipping_datetime']
                wanted_cargo_data[DATE] = shipping_datetime.strftime(
                    '%d-%m-%Y')
                wanted_cargo_data[TIME] = shipping_datetime.strftime('%H:%M')
                wanted_cargo_data[NAME] = user[NAME]
                wanted_cargo_data[SURNAME] = user[SURNAME]
                wanted_cargo_data[USERNAME] = user[USERNAME]

                reply_text = get_new_cargo_layout(wanted_cargo_data,
                                                  user[LANG])
                inline_keyboard = InlineKeyboard(
                    paginate_keyboard, user[LANG],
                    data=(wanted, user_cargoes)).get_keyboard()

            update.message.reply_html(reply_text, reply_markup=inline_keyboard)

        elif text == reply_keyboard_types[menu_keyboard][user[LANG]][4]:

            reply_keyboard = ReplyKeyboard(settings_keyboard,
                                           user[LANG]).get_keyboard()
            update.message.reply_text(full_text, reply_markup=reply_keyboard)

        elif text == reply_keyboard_types[settings_keyboard][user[LANG]][1]:

            inline_keyboard = InlineKeyboard(user_data_keyboard,
                                             user[LANG]).get_keyboard()
            update.message.reply_html(get_user_info_layout(user),
                                      reply_markup=inline_keyboard)

        elif text == reply_keyboard_types[settings_keyboard][user[LANG]][2]:

            reply_text = 'Tilni tanlang\nВыберите язык\nТилни танланг'

            inline_keyboard = InlineKeyboard(langs_keyboard).get_keyboard()
            update.message.reply_text(reply_text, reply_markup=inline_keyboard)

        elif text == reply_keyboard_types[settings_keyboard][user[LANG]][3]:

            reply_keyboard = ReplyKeyboard(menu_keyboard,
                                           user[LANG]).get_keyboard()
            update.message.reply_text(full_text, reply_markup=reply_keyboard)

        else:

            thinking_emoji = '\U0001F914'

            reply_keyboard = ReplyKeyboard(menu_keyboard,
                                           user[LANG]).get_keyboard()
            update.message.reply_text(thinking_emoji,
                                      quote=True,
                                      reply_markup=reply_keyboard)

    else:

        reply_text = "\U000026A0 Siz ro'yxatdan o'tmagansiz !\nBuning uchun /start ni bosing.\n\n'" \
                     "\U000026A0 Вы не зарегистрированы !\nДля этого нажмите /start\n\n" \
                     "\U000026A0 Сиз рўйхатдан ўтмагансиз !\nБунинг учун /start ни босинг"

        update.message.reply_text(reply_text)
def edit_date_and_time_callback(update: Update, context: CallbackContext):
    callback_query = update.callback_query
    data = callback_query.data

    user_data = context.user_data
    user = user_data['user_data']

    if data == 'back' or data == 'now':
        inline_keyboard = InlineKeyboard(edit_keyboard,
                                         user[LANG]).get_keyboard()
        answer = None

        if data == 'now':
            user_data[USER_INPUT_DATA][DATE] = datetime.datetime.now(
            ).strftime('%d-%m-%Y')
            user_data[USER_INPUT_DATA][TIME] = 'now'

            if user[LANG] == LANGS[0]:
                answer = "Kun va vaqt tahrirlandi"

            if user[LANG] == LANGS[1]:
                answer = "Дата и время изменены"

            if user[LANG] == LANGS[2]:
                answer = "Кун ва вақт таҳрирланди"

            answer = '\U0001F44F\U0001F44F\U0001F44F ' + answer

        layout = get_new_cargo_layout(user_data[USER_INPUT_DATA], user[LANG])

        state = 'edit'

    if data == 'today' or data == 'tomorrow' or data == 'after_tomorrow':

        if data == 'today':
            user_data[USER_INPUT_DATA]['new_date'] = datetime.datetime.now(
            ).strftime('%d-%m-%Y')

        if data == 'tomorrow':
            tomorrow = datetime.datetime.now() + datetime.timedelta(days=1)
            user_data[USER_INPUT_DATA]['new_date'] = tomorrow.strftime(
                '%d-%m-%Y')

        if data == 'after_tomorrow':
            after_tomorrow = datetime.datetime.now() + datetime.timedelta(
                days=2)
            user_data[USER_INPUT_DATA]['new_date'] = after_tomorrow.strftime(
                '%d-%m-%Y')

        if user[LANG] == LANGS[0]:
            text = "Soatni belgilang"
            button_text = 'Ortga'

        if user[LANG] == LANGS[1]:
            text = "Выберите время"
            button_text = "Назад"

        if user[LANG] == LANGS[2]:
            text = "Соатни белгиланг"
            button_text = "Ортга"

        text = f'{text} :'
        button_text = '« ' + button_text

        inline_keyboard = InlineKeyboard(hours_keyboard,
                                         user[LANG],
                                         begin=6,
                                         end=17).get_keyboard()
        inline_keyboard['inline_keyboard'].append(
            [InlineKeyboardButton(button_text, callback_data='back')])

        layout = text
        answer = None
        state = 'edit_hour'

    callback_query.answer(answer)

    if user_data[USER_INPUT_DATA][PHOTO]:
        callback_query.edit_message_caption(layout,
                                            reply_markup=inline_keyboard,
                                            parse_mode=ParseMode.HTML)
    else:
        callback_query.edit_message_text(layout,
                                         reply_markup=inline_keyboard,
                                         parse_mode=ParseMode.HTML)

    user_data[USER_INPUT_DATA][STATE] = state
    return state
Example #19
0
def to_location_callback(update: Update, context: CallbackContext):
    # with open('jsons/update.json', 'w') as update_file:
    #     update_file.write(update.to_json())
    user_data = context.user_data
    user = user_data['user_data']

    if not update.message.location:

        if user[LANG] == LANGS[0]:
            error_text = "Geolokatsiya yuborilmadi !\n\n" \
                         "Yukni jo'natish geolokatsiyasini yuboring yoki \U000027A1 ni bosing"

        if user[LANG] == LANGS[1]:
            error_text = "Геолокация не отправлена !\n\n" \
                         "Отправите геолокацию доставки или нажмите \U000027A1"

        if user[LANG] == LANGS[2]:
            error_text = "Геолокация юборилмади !\n\n" \
                         "Юкни жўнатиш геолокациясини юборинг ёки \U000027A1 ни босинг"

        error_text = '\U000026A0 ' + error_text

        update.message.reply_text(error_text, quote=True)

        state = user_data[USER_INPUT_DATA][STATE]

    else:

        longitude = update.message.location.longitude
        latitude = update.message.location.latitude

        user_data[USER_INPUT_DATA][TO_LOCATION] = {
            'longitude': longitude,
            'latitude': latitude
        }

        logger.info('new_cargo_info: %s', user_data[USER_INPUT_DATA])

        if user[LANG] == LANGS[0]:
            text = "Yuk og'irligini tanlang:\n\n" \
                   "Yoki bu bosqichni o'tkazib yuborish uchun \U000027A1 ni bosing"

        if user[LANG] == LANGS[1]:
            text = 'Выберите вес груза:\n\n' \
                   'Или нажмите \U000027A1, чтобы пропустить этот шаг'

        if user[LANG] == LANGS[2]:
            text = "Юк оғирлигини танланг:\n\n" \
                   "Ёки бу босқични ўтказиб юбориш учун \U000027A1 ни босинг"

        inline_keyboard = InlineKeyboard(weights_keyboard,
                                         user[LANG]).get_keyboard()
        inline_keyboard['inline_keyboard'].append(
            [InlineKeyboardButton('\U000027A1', callback_data='skip_weight')])

        context.bot.edit_message_reply_markup(
            update.effective_chat.id,
            user_data[USER_INPUT_DATA].pop(MESSAGE_ID))
        message = update.message.reply_text(text, reply_markup=inline_keyboard)

        state = WEIGHT_UNIT
        user_data[USER_INPUT_DATA][STATE] = state
        user_data[USER_INPUT_DATA][MESSAGE_ID] = message.message_id

    return state
Example #20
0
def confirmation_callback(update: Update, context: CallbackContext):
    callback_query = update.callback_query
    data = callback_query.data

    user_data = context.user_data
    user = user_data['user_data']

    logger.info('user_input_data: %s', user_data[USER_INPUT_DATA])

    if data == 'confirm':

        if user[LANG] == LANGS[0]:
            text = "E'lon tasdiqlandi"

        if user[LANG] == LANGS[1]:
            text = 'Объявление подтверждено'

        if user[LANG] == LANGS[2]:
            text = "Эълон тасдиқланди"

        text = f'\U00002705 {text} !'

        if user_data[USER_INPUT_DATA][FROM_LOCATION] or user_data[
                USER_INPUT_DATA][TO_LOCATION]:
            inline_keyboard = InlineKeyboard(confirm_keyboard,
                                             lang='cy',
                                             data=user_data[USER_INPUT_DATA],
                                             geolocation=True).get_keyboard()
        else:
            inline_keyboard = None

        user_data[USER_INPUT_DATA][STATE] = 'opened'
        cargo_data_for_insert = dict(user_data[USER_INPUT_DATA])
        cargo_data_for_insert.pop(NAME)
        cargo_data_for_insert.pop(SURNAME)
        cargo_data_for_insert.pop(USERNAME)
        cargo_data_for_insert.pop(MESSAGE_ID)
        insert_cargo_id = insert_cargo(cargo_data_for_insert)

        if insert_cargo_id:
            user_data[USER_INPUT_DATA][ID] = insert_cargo_id

            layout = get_new_cargo_layout(user_data[USER_INPUT_DATA],
                                          user[LANG])
            layout_2 = get_new_cargo_layout(user_data[USER_INPUT_DATA], 'cy')

            if user_data[USER_INPUT_DATA][PHOTO]:
                message = context.bot.send_photo(
                    GROUP_ID,
                    user_data[USER_INPUT_DATA][PHOTO].get('file_id'),
                    layout_2,
                    reply_markup=inline_keyboard,
                    parse_mode=ParseMode.HTML)

            else:
                message = context.bot.send_message(
                    GROUP_ID,
                    layout_2,
                    reply_markup=inline_keyboard,
                    parse_mode=ParseMode.HTML)

            update_cargo_post_id(message.message_id, insert_cargo_id)

        else:

            layout = 'ERROR'
            text = layout

        if user_data[USER_INPUT_DATA][PHOTO]:
            callback_query.edit_message_caption(layout,
                                                parse_mode=ParseMode.HTML)
        else:
            callback_query.edit_message_text(layout, parse_mode=ParseMode.HTML)

        reply_keyboard = ReplyKeyboard(menu_keyboard,
                                       user[LANG]).get_keyboard()
        callback_query.message.reply_text(text, reply_markup=reply_keyboard)

        del user_data[USER_INPUT_DATA]
        state = ConversationHandler.END

    if data == 'edit':
        # with open('jsons/callback_query.json', 'w') as cargo:
        #     cargo.write(callback_query.to_json())
        inline_keyboard = InlineKeyboard(edit_keyboard,
                                         user[LANG]).get_keyboard()

        callback_query.answer()
        callback_query.edit_message_reply_markup(inline_keyboard)

        state = EDIT
        user_data[USER_INPUT_DATA][STATE] = state

    return state
Example #21
0
def skip_callback(update: Update, context: CallbackContext):
    callback_query = update.callback_query
    data = callback_query.data

    user_data = context.user_data
    user = user_data['user_data']

    if data == 'skip_to_location':

        user_data[USER_INPUT_DATA][TO_LOCATION] = None

        if user[LANG] == LANGS[0]:
            location = "noma'lum"
            location_text = "Yukni jo'natish geolokatsiyasi"
            text = "Yuk og'irligini tanlang:\n\n" \
                   "Yoki bu bosqichni o'tkazib yuborish uchun \U000027A1 ni bosing"

        if user[LANG] == LANGS[1]:
            location = 'неизвестно'
            location_text = 'Геолокация доставки'
            text = 'Выберите вес груза:\n\n' \
                   'Или нажмите \U000027A1, чтобы пропустить этот шаг'

        if user[LANG] == LANGS[2]:
            location = "номаълум"
            location_text = "Юкни жўнатиш геолокацияси"
            text = "Юк оғирлигини танланг:\n\n" \
                   "Ёки бу босқични ўтказиб юбориш учун \U000027A1 ни босинг"

        edit_text = f'<b><i>{location_text}: {location}</i></b>'
        callback_query.edit_message_text(edit_text, parse_mode=ParseMode.HTML)

        inline_keyboard = InlineKeyboard(weights_keyboard,
                                         user[LANG]).get_keyboard()
        inline_keyboard['inline_keyboard'].append(
            [InlineKeyboardButton('\U000027A1', callback_data='skip_weight')])

        message = callback_query.message.reply_text(
            text, reply_markup=inline_keyboard)
        user_data[USER_INPUT_DATA][MESSAGE_ID] = message.message_id

        state = WEIGHT_UNIT

    if data == 'skip_volume':

        user_data[USER_INPUT_DATA][VOLUME] = None

        if user[LANG] == LANGS[0]:
            volume = "noma'lum"
            volume_text = "Yuk hajmi"
            reply_text = "Yuk tavsifini yuboring:\n\n" \
                         "Yoki bu bosqichni o'tkazib yuborish uchun \U000027A1 ni bosing"

        if user[LANG] == LANGS[1]:
            volume = 'неизвестно'
            volume_text = "Объем груза"
            reply_text = "Отправьте описание груза:\n\n" \
                         "Или нажмите \U000027A1, чтобы пропустить этот шаг"

        if user[LANG] == LANGS[2]:
            volume = "номаълум"
            volume_text = "Юк ҳажми"
            reply_text = "Юк тавсифини юборинг:\n\n" \
                         "Ёки бу босқични ўтказиб юбориш учун \U000027A1 ни босинг"

        edit_text = f'<b><i>{volume_text}: {volume}</i></b>'
        callback_query.edit_message_text(edit_text, parse_mode=ParseMode.HTML)

        state = DEFINITION

        message = callback_query.message.reply_text(
            reply_text, reply_markup=get_skip_keyboard(state))
        user_data[USER_INPUT_DATA][MESSAGE_ID] = message.message_id

    if data == 'skip_definition':

        user_data[USER_INPUT_DATA][DEFINITION] = None

        if user[LANG] == LANGS[0]:
            definition = "noma'lum"
            definition_text = "Yuk tasnif"
            reply_text = "Yuk rasmini yuboring:\n\n" \
                         "Yoki bosqichni o'tkazib yuborish uchun \U000027A1 ni bosing"

        if user[LANG] == LANGS[1]:
            definition = "неизвестно"
            definition_text = "Описание груза"
            reply_text = "Отправите фотография груза:\n\n" \
                         "Или нажмите \U000027A1, чтобы пропустить этот шаг"

        if user[LANG] == LANGS[2]:
            definition = "номаълум"
            definition_text = "Юк тасниф"
            reply_text = "Юк расмини юборинг:\n\n" \
                         "Ёки босқични ўтказиб юбориш учун \U000027A1 ни босинг"

        edit_text = f'<b><i>{definition_text}: {definition}</i></b>'
        callback_query.edit_message_text(edit_text, parse_mode=ParseMode.HTML)

        state = PHOTO

        message = callback_query.message.reply_text(
            reply_text, reply_markup=get_skip_keyboard(state))
        user_data[USER_INPUT_DATA][MESSAGE_ID] = message.message_id

    if data == 'skip_photo':

        user_data[USER_INPUT_DATA][PHOTO] = None

        if user[LANG] == LANGS[0]:
            photo = "yuborilmagan"
            photo_text = "Yuk rasmi"
            reply_text = "Yukni jo'natish kunini tanlang"

        if user[LANG] == LANGS[1]:
            photo = "не отправлено"
            photo_text = "Фотография груза"
            reply_text = "Выберите дату доставки"

        if user[LANG] == LANGS[2]:
            photo = "юборилмаган"
            photo_text = "Юк расми"
            reply_text = "Юкни жўнатиш кунини танланг"

        edit_text = f'<b><i>{photo_text}: {photo}</i></b>'
        reply_text = f'{reply_text}:'

        callback_query.edit_message_text(edit_text, parse_mode=ParseMode.HTML)

        inline_keyboard = InlineKeyboard(dates_keyboard,
                                         user[LANG]).get_keyboard()
        message = callback_query.message.reply_text(
            reply_text, reply_markup=inline_keyboard)

        user_data[USER_INPUT_DATA][MESSAGE_ID] = message.message_id

        state = DATE

    user_data[USER_INPUT_DATA][STATE] = state
    return state
Example #22
0
def from_location_callback(update: Update, context: CallbackContext):
    # with open('jsons/update.json', 'w') as update_file:
    #     update_file.write(update.to_json())
    text = update.message.text

    user_data = context.user_data
    user = user_data['user_data']

    if update.message.location or text == '\U000027A1':

        if text == '\U000027A1':

            user_data[USER_INPUT_DATA][FROM_LOCATION] = None

        else:

            longitude = update.message.location.longitude
            latitude = update.message.location.latitude

            user_data[USER_INPUT_DATA][FROM_LOCATION] = {
                'longitude': longitude,
                'latitude': latitude
            }

        logger.info('new_cargo_info: %s', user_data[USER_INPUT_DATA])

        if user[LANG] == LANGS[0]:
            text_2 = "Qayerga (Viloyatni tanlang)"

        if user[LANG] == LANGS[1]:
            text_2 = "Куда (Выберите область)"

        if user[LANG] == LANGS[2]:
            text_2 = "Қаерга (Вилоятни танланг)"

        text_1 = '\U0001F44D\U0001F44D\U0001F44D'
        text_2 = f'{text_2} :'

        update.message.reply_text(text_1, reply_markup=ReplyKeyboardRemove())

        inline_keyboard = InlineKeyboard(regions_keyboard,
                                         user[LANG]).get_keyboard()
        message = update.message.reply_text(text_2,
                                            reply_markup=inline_keyboard)

        state = TO_REGION
        user_data[USER_INPUT_DATA][STATE] = state
        user_data[USER_INPUT_DATA][MESSAGE_ID] = message.message_id

    else:

        if user[LANG] == LANGS[0]:
            error_text = "Geolokatsiya yuborilmadi !\n\n" \
                         "Geolokatsiyangizni yuboring yoki \U000027A1 ni bosing"

        if user[LANG] == LANGS[1]:
            error_text = "Геолокация не отправлена !\n\n" \
                         "Отправьте свою геолокацию или нажмите \U000027A1"

        if user[LANG] == LANGS[2]:
            error_text = "Геолокация юборилмади !\n\n" \
                         "Геолокациянгизни юборинг ёки \U000027A1 ни босинг"

        error_text = '\U000026A0 ' + error_text
        update.message.reply_text(error_text, quote=True)

        state = user_data[USER_INPUT_DATA][STATE]

    return state
def edit_from_location_callback(update: Update, context: CallbackContext):
    text = update.message.text

    user_data = context.user_data
    user = user_data['user_data']

    if user[LANG] == LANGS[0]:
        reply_text = "Yuboruvchi geolokatsiyasi tahrirlandi"

    if user[LANG] == LANGS[1]:
        reply_text = "Геолокация отправителя изменена"

    if user[LANG] == LANGS[2]:
        reply_text = "Юборувчи геолокацияси таҳрирланди"

    reply_text = '\U0001F44F\U0001F44F\U0001F44F ' + reply_text

    if update.message.location:

        longitude = update.message.location.longitude
        latitude = update.message.location.latitude

        user_data[USER_INPUT_DATA][FROM_LOCATION] = {
            'longitude': longitude,
            'latitude': latitude
        }

        update.message.reply_text(reply_text, reply_markup=ReplyKeyboardRemove())

        inline_keyboard = InlineKeyboard('edit_keyboard', user[LANG]).get_keyboard()

        state = 'edit'
        user_data[USER_INPUT_DATA][STATE] = state

    elif text == "«Eski geolokatsiyamni o'chirish»" or text == '«Удалить мою старую геолокацию»' or \
            text == "«Ески геолокациямни ўчириш»":

        user_data[USER_INPUT_DATA][FROM_LOCATION] = None

        update.message.reply_text(reply_text, reply_markup=ReplyKeyboardRemove())

        inline_keyboard = InlineKeyboard('edit_keyboard', user[LANG]).get_keyboard()

        state = 'edit'
        user_data[USER_INPUT_DATA][STATE] = state

    elif text == "« Ortga" or text == "« Назад" or text == "« Ортга":

        update.message.reply_text(update.message.text, reply_markup=ReplyKeyboardRemove())

        inline_keyboard = InlineKeyboard(edit_address_keyboard, user[LANG]).get_keyboard()

        state = 'edit_address'
        user_data[USER_INPUT_DATA][STATE] = state

    else:

        if user[LANG] == LANGS[0]:
            error_text = "Geolokatsiyangizni yuboring"

        if user[LANG] == LANGS[1]:
            error_text = "Отправьте свою геолокацию"

        if user[LANG] == LANGS[2]:
            error_text = "Геолокациянгизни юборинг"

        error_text = f'\U000026A0 {error_text} !'

        update.message.reply_text(error_text, quote=True)

        return user_data[USER_INPUT_DATA][STATE]

    # logger.info('new_cargo_info: %s', user_data[USER_INPUT_DATA])
    layout = get_new_cargo_layout(user_data[USER_INPUT_DATA], user[LANG])

    if user_data[USER_INPUT_DATA][PHOTO]:
        message = update.message.reply_photo(user_data[USER_INPUT_DATA][PHOTO]['file_id'], caption=layout,
                                             reply_markup=inline_keyboard, parse_mode=ParseMode.HTML)
    else:
        message = update.message.reply_html(layout, reply_markup=inline_keyboard)

    user_data[USER_INPUT_DATA][MESSAGE_ID] = message.message_id

    return state
Example #24
0
def phone_number_callback(update: Update, context: CallbackContext):
    # with open('jsons/update.json', 'w') as update_file:
    #     update_file.write(update.to_json())
    text = update.message.text
    contact = update.message.contact

    user_data = context.user_data
    user = user_data['user_data']

    if contact:
        phone_number = phone_number_filter(contact.phone_number)

    else:
        phone_number = phone_number_filter(text)

    if phone_number:

        user_data[USER_INPUT_DATA][USER_PHONE_NUMBER] = phone_number

        layout = get_new_cargo_layout(user_data[USER_INPUT_DATA], user[LANG])

        inline_keyboard = InlineKeyboard(
            confirm_keyboard, user[LANG],
            data=user_data[USER_INPUT_DATA]).get_keyboard()

        update.message.reply_text('\U0001F447\U0001F447\U0001F447',
                                  reply_markup=ReplyKeyboardRemove())

        if user_data[USER_INPUT_DATA][PHOTO]:
            message = update.message.reply_photo(
                user_data[USER_INPUT_DATA][PHOTO].get('file_id'),
                layout,
                reply_markup=inline_keyboard,
                parse_mode=ParseMode.HTML)
        else:
            message = update.message.reply_html(layout,
                                                reply_markup=inline_keyboard)

        logger.info('user_input_data: %s', user_data[USER_INPUT_DATA])

        state = CONFIRMATION
        user_data[USER_INPUT_DATA][STATE] = state
        user_data[USER_INPUT_DATA][MESSAGE_ID] = message.message_id

    else:

        if user[LANG] == LANGS[0]:
            error_text = "Xato telefon raqami yuborildi"

        if user[LANG] == LANGS[1]:
            error_text = "Номер телефона с ошибкой отправлен"

        if user[LANG] == LANGS[2]:
            error_text = "Хато телефон рақами юборилди"

        error_text = f'\U000026A0 {error_text} !'
        phone_number_layout = get_phone_number_layout(user[LANG])

        update.message.reply_text(error_text, quote=True)
        update.message.reply_html(phone_number_layout)

        state = user_data[USER_INPUT_DATA][STATE]

    return state
def edit_to_location_callback(update: Update, context: CallbackContext):
    user_data = context.user_data
    user = user_data['user_data']

    callback_query = update.callback_query

    if callback_query:

        data = callback_query.data
        layout = get_new_cargo_layout(user_data[USER_INPUT_DATA], user[LANG])

        if data == 'back':
            inline_keyboard = InlineKeyboard(edit_address_keyboard, user[LANG]).get_keyboard()
            answer = None

            state = 'edit_address'

        if data == 'delete':
            user_data[USER_INPUT_DATA][TO_LOCATION] = None

            inline_keyboard = InlineKeyboard(edit_keyboard, user[LANG]).get_keyboard()

            if user[LANG] == LANGS[0]:
                answer = "Qabul qiluvchi geolokatsiyasi tahrirlandi"

            if user[LANG] == LANGS[1]:
                answer = "Геолокация получателя изменена"

            if user[LANG] == LANGS[2]:
                answer = "Қабул қилувчи геолокацияси таҳрирланди"

            answer = '\U0001F44F\U0001F44F\U0001F44F ' + answer

            state = 'edit'

        callback_query.answer(answer)

        if user_data[USER_INPUT_DATA][PHOTO]:
            callback_query.edit_message_caption(layout, reply_markup=inline_keyboard, parse_mode=ParseMode.HTML)
        else:
            callback_query.edit_message_text(layout, reply_markup=inline_keyboard, parse_mode=ParseMode.HTML)

        user_data[USER_INPUT_DATA][STATE] = state

        return state

    else:

        if update.message.location:

            longitude = update.message.location.longitude
            latitude = update.message.location.latitude

            user_data[USER_INPUT_DATA][TO_LOCATION] = {
                'longitude': longitude,
                'latitude': latitude
            }

            if user[LANG] == LANGS[0]:
                answer = "Qabul qiluvchi geolokatsiyasi tahrirlandi"

            if user[LANG] == LANGS[1]:
                answer = "Геолокация получателя изменена"

            if user[LANG] == LANGS[2]:
                answer = "Қабул қилувчи геолокацияси таҳрирланди"

            answer = '\U0001F44F\U0001F44F\U0001F44F ' + answer

            update.message.reply_text(answer)

            layout = get_new_cargo_layout(user_data[USER_INPUT_DATA], user[LANG])
            inline_keyboard = InlineKeyboard(edit_keyboard, user[LANG]).get_keyboard()

            context.bot.edit_message_reply_markup(update.effective_chat.id,
                                                  user_data[USER_INPUT_DATA].pop('message_id'))

            if user_data[USER_INPUT_DATA][PHOTO]:
                message = update.message.reply_photo(user_data[USER_INPUT_DATA][PHOTO]['file_id'], caption=layout,
                                                     reply_markup=inline_keyboard, parse_mode=ParseMode.HTML)
            else:
                message = update.message.reply_html(layout, reply_markup=inline_keyboard)

            state = 'edit'
            user_data[USER_INPUT_DATA][STATE] = state
            user_data[USER_INPUT_DATA][MESSAGE_ID] = message.message_id

            return state

        else:

            if user[LANG] == LANGS[0]:
                error_text = "Yukni jo'natish geolokatsiyasini yuboring"

            if user[LANG] == LANGS[1]:
                error_text = "Отправите геолокацию доставки"

            if user[LANG] == LANGS[2]:
                error_text = "Юкни жўнатиш геолокациясини юборинг"

            error_text = f'\U000026A0 {error_text} !'
            update.message.reply_text(error_text, quote=True)

            return user_data[USER_INPUT_DATA][STATE]
Example #26
0
def inline_keyboards_handler_callback(update: Update,
                                      context: CallbackContext):
    # with open('jsons/callback_query.json', 'w') as callback_query_file:
    #     callback_query_file.write(callback_query.to_json())
    user_data = context.user_data
    set_user_data(update.effective_user.id, user_data)
    user = user_data['user_data']

    callback_query = update.callback_query
    data = callback_query.data

    if user[IS_ADMIN] and user[TG_ID] in ACTIVE_ADMINS:

        match_obj = re.search(r'^[rc]_\d+$', data)
        match_obj_2 = re.search(r'[rc]_[yn]_\d+$', data)
        match_obj_3 = re.search(r'^w_\d+$', data)
        match_obj_4 = re.search(r'^h_w_\d+$', data)

        new_text = ''

        if match_obj or match_obj_2:

            if match_obj:
                data = match_obj.string.split('_')
                keyboard = yes_no_keyboard

            elif match_obj_2:
                data = match_obj_2.string.split('_')
                order = get_order(data[-1])

                geo = json.loads(
                    order[GEOLOCATION]) if order[GEOLOCATION] else None

                if data[1] == 'n':
                    keyboard = orders_keyboard
                    data = [geo, data[-1]]

                elif data[1] == 'y':

                    status = 'canceled' if data[0] == 'c' else 'received'

                    if order[STATUS] == 'waiting':
                        update_result = update_order_status(status, data[-1])
                        status_text = 'rad etilgan' if status == 'canceled' else 'qabul qilingan'

                        if update_result:
                            client_text = 'Buyurtma rad qilindi.' if status == 'canceled' else 'Buyurtma qabul qilindi.'
                            client_text = wrap_tags(
                                client_text) + f' [ \U0001F194 {order[ID]} ]'

                            if status == 'received':
                                client_text += '\nBuyurtma yetkazilganidan keyin ' \
                                               f'{wrap_tags("Yetkazib berildi")} tugmasini bosing.\n'
                                inline_keyboard = InlineKeyboard(
                                    delivery_keyboard,
                                    user[LANG],
                                    data=data[-1]).get_keyboard()
                            else:
                                inline_keyboard = None

                            context.bot.send_message(
                                order[USER_TG_ID],
                                client_text,
                                parse_mode=ParseMode.HTML,
                                reply_to_message_id=order[MESSAGE_ID],
                                reply_markup=inline_keyboard)

                    elif order[STATUS] == 'received':
                        status_text = 'buyurtma avval qabul qilingan !'

                    elif order[STATUS] == 'delivered':
                        status_text = 'buyurtma avval yetkazilgan !'

                    elif order[STATUS] == 'canceled':
                        status_text = 'buyurtma avval rad qilingan !'

                    data, keyboard = (geo, geo_keyboard) if geo else (None,
                                                                      None)

                    new_text = callback_query.message.text_html.split('\n')
                    new_text[0] = ' '.join(new_text[0].split()[:2])
                    new_text[-1] = f'Status: {wrap_tags(status_text)}'
                    new_text = '\n'.join(new_text)

            callback_query.answer()

            if new_text:
                if keyboard:
                    inline_keyboard = InlineKeyboard(keyboard,
                                                     user[LANG],
                                                     data=data).get_keyboard()
                else:
                    inline_keyboard = None

                callback_query.edit_message_text(new_text,
                                                 reply_markup=inline_keyboard,
                                                 parse_mode=ParseMode.HTML)

            else:

                inline_keyboard = InlineKeyboard(keyboard,
                                                 user[LANG],
                                                 data=data).get_keyboard()
                callback_query.edit_message_reply_markup(inline_keyboard)

        elif match_obj_3 or match_obj_4:

            if match_obj_4:
                orders_list = get_orders_by_status(('delivered', 'canceled'))
                history = True
                label = '[Tarix]'

            else:
                orders_list = get_orders_by_status('received')
                history = None
                label = ''

            if orders_list:
                wanted = int(data.split('_')[-1])
                if wanted > len(orders_list):
                    wanted = 1

                order = orders_list[wanted - 1]
                status = 'yetkazilgan' if order[STATUS] == 'delivered' else 'rad etilgan' \
                    if order[STATUS] == 'canceled' else 'qabul qilingan'
                order_itmes = get_order_items(order[ID])
                new_dict = dict()

                for item in order_itmes:
                    new_dict.update({item['book_id']: item['quantity']})

                books_ids = [str(item['book_id']) for item in order_itmes]
                books = get_books(books_ids)
                books_text = ''

                for book in books:
                    books_text += f'Kitob nomi: {wrap_tags(book[TITLE])}\n' \
                                  f'Soni: {wrap_tags(str(new_dict[book[ID]]) + " ta")}' \
                                  f'\n{wrap_tags("".ljust(22, "-"))}\n\n'
                inline_keyboard = InlineKeyboard(
                    paginate_keyboard,
                    user[LANG],
                    data=[wanted, orders_list],
                    history=history).get_keyboard()

                if order[GEOLOCATION]:
                    geo = json.loads(order[GEOLOCATION])
                    inline_keyboard = inline_keyboard.inline_keyboard
                    keyboard = InlineKeyboard(
                        geo_keyboard, data=geo).get_keyboard().inline_keyboard
                    inline_keyboard += keyboard
                    inline_keyboard = InlineKeyboardMarkup(inline_keyboard)

                if order['with_action']:
                    label += "[🔥MEGA AKSIYA(5 + 1)🔥]"

                client = get_user(order[USER_ID])

                text = [
                    f'\U0001F194 {order[ID]} {label}\n',
                    f'Status: {wrap_tags(status)}',
                    f'Yaratilgan vaqti: {wrap_tags(order["created_at"].strftime("%d-%m-%Y %X"))}\n',
                    f'Ism: {wrap_tags(client[FULLNAME])}',
                    f'Tel: {wrap_tags(order[PHONE_NUMBER])}',
                    f'Telegram: {wrap_tags("@" + client[USERNAME])}'
                    if client[USERNAME] else ''
                    # f'Manzil: {order["address"]}',
                ]

                text = '\n'.join(text)
                text += f'\n\n{books_text}'
                callback_query.answer()
                callback_query.edit_message_text(text,
                                                 reply_markup=inline_keyboard,
                                                 parse_mode=ParseMode.HTML)

            else:
                text = "Tarix bo'limiga o'ting !"

                callback_query.edit_message_text(text)

        else:
            callback_query.answer()

    elif not user[IS_ADMIN]:

        match_obj = re.search(r'^w_\d+$', data)
        match_obj_2 = re.search(r'^d_\d+$', data)
        callback_query.answer()

        if match_obj:

            wanted = int(match_obj.string.split('_')[-1])
            user_orders = get_user_orders(user[ID])
            order = user_orders[wanted - 1]
            order_itmes = get_order_items(order[ID])
            new_dict = dict()
            books_ids = []
            books_text = ''
            label = ''
            if order['with_action']:
                label = "[🔥MEGA AKSIYA(5 + 1)🔥]"

            for item in order_itmes:
                new_dict.update({item['book_id']: item['quantity']})
                books_ids += [str(item['book_id'])]

            books = get_books(books_ids)
            for book in books:
                books_text += f'Kitob nomi: {wrap_tags(book[TITLE])}\n' \
                              f'Soni: {wrap_tags(str(new_dict[book[ID]]) + " ta")}' \
                              f'\n{wrap_tags("".ljust(22, "-"))}\n\n'

            status = 'qabul qilingan' if order[STATUS] == 'received' else 'rad etilgan' \
                if order[STATUS] == 'canceled' else 'qabul qilish kutilmoqda' \
                if order[STATUS] == 'waiting' else 'yetkazilgan'

            text = [
                f'\U0001F194 {order[ID]} {label}\n',
                f'Status: {wrap_tags(status)}',
                f'Yaratilgan vaqti: {wrap_tags(order["created_at"].strftime("%d-%m-%Y %X"))}'
            ]
            text = '\n'.join(text)
            text += f'\n\n{books_text}'

            inline_keyboard = InlineKeyboard(paginate_keyboard, user[LANG], data=[wanted, user_orders]) \
                .get_keyboard()

            if order[STATUS] == 'received':
                deliv_keyb = InlineKeyboard(delivery_keyboard,
                                            user[LANG],
                                            data=order[ID]).get_keyboard()
                pag_keyb = inline_keyboard.inline_keyboard
                deliv_keyb = deliv_keyb.inline_keyboard
                inline_keyboard = InlineKeyboardMarkup(pag_keyb + deliv_keyb)

            callback_query.edit_message_text(text,
                                             reply_markup=inline_keyboard,
                                             parse_mode=ParseMode.HTML)

        elif match_obj_2:

            order_id = data.split('_')[-1]
            status = 'delivered'
            update_order_status(status, order_id)

            status = 'yetkazilgan'
            text = callback_query.message.text_html.split('\n')

            if len(callback_query.message.reply_markup.inline_keyboard) == 1:
                text += [f'\nStatus: {wrap_tags(status)}']
                text = '\n'.join(text)

                callback_query.edit_message_text(text,
                                                 parse_mode=ParseMode.HTML)

            else:

                text[2] = f'Status: {wrap_tags(status)}'
                text = '\n'.join(text)
                inline_keyboard = InlineKeyboardMarkup(
                    [callback_query.message.reply_markup.inline_keyboard[0]])

                callback_query.edit_message_text(text,
                                                 reply_markup=inline_keyboard,
                                                 parse_mode=ParseMode.HTML)

    else:
        callback_query.answer(
            "Siz aktiv admin emassiz !!!\n"
            "Siz siz bu operatsiyani bajara olmaysiz !!!\n\n"
            "\U00002639\U00002639\U00002639\U00002639\U00002639",
            show_alert=True)
def edit_callback(update: Update, context: CallbackContext):
    user_data = context.user_data
    user = user_data['user_data']

    callback_query = update.callback_query
    data = callback_query.data

    if data == 'edit_address':
        inline_keyboard = InlineKeyboard(edit_address_keyboard,
                                         user[LANG]).get_keyboard()
        state = 'edit_address'

    if data == 'edit_cargo_info':
        inline_keyboard = InlineKeyboard(edit_cargo_info_keyboard,
                                         user[LANG]).get_keyboard()
        state = 'edit_cargo_info'

    if data == 'terminate_editing':
        inline_keyboard = InlineKeyboard(
            confirm_keyboard, user[LANG],
            data=user_data[USER_INPUT_DATA]).get_keyboard()
        state = 'confirmation'

    if data == 'edit_date_and_time':

        if user[LANG] == LANGS[0]:
            text = "Kunni tanlang"
            button_text = "Ortga"

        if user[LANG] == LANGS[1]:
            text = "Выберите день"
            button_text = "Назад"

        if user[LANG] == LANGS[2]:
            text = "Кунни танланг"
            button_text = "Ортга"

        text += ' :'
        button_text = '« ' + button_text

        inline_keyboard = InlineKeyboard(dates_keyboard,
                                         user[LANG]).get_keyboard()
        inline_keyboard['inline_keyboard'].append(
            [InlineKeyboardButton(button_text, callback_data='back')])

        callback_query.answer()

        if user_data[USER_INPUT_DATA][PHOTO]:
            callback_query.edit_message_caption(text,
                                                reply_markup=inline_keyboard)
        else:
            callback_query.edit_message_text(text,
                                             reply_markup=inline_keyboard)

        state = 'edit_date_and_time'
        user_data[USER_INPUT_DATA][STATE] = state

        return state

    callback_query.answer()
    callback_query.edit_message_reply_markup(inline_keyboard)

    user_data[USER_INPUT_DATA][STATE] = state
    return state
Example #28
0
def from_district_callback(update: Update, context: CallbackContext):
    # with open('jsons/update.json', 'w') as update_file:
    #     update_file.write(update.to_json())

    callback_query = update.callback_query
    data = callback_query.data

    user_data = context.user_data
    user = user_data['user_data']

    if data == BUTTONS_DATA_DICT[6]:

        if user[LANG] == LANGS[0]:
            text = "Qayerdan (Viloyatni tanlang)"

        if user[LANG] == LANGS[1]:
            text = "Откуда (Выберите область)"

        if user[LANG] == LANGS[2]:
            text = "Қаердан (Вилоятни танланг)"

        text = f'{text} :'

        inline_keyboard = InlineKeyboard(regions_keyboard,
                                         user[LANG]).get_keyboard()
        callback_query.edit_message_text(text, reply_markup=inline_keyboard)

        state = FROM_REGION

    else:

        user_data[USER_INPUT_DATA][FROM_DISTRICT] = data

        logger.info('new_cargo_info: %s', user_data[USER_INPUT_DATA])

        if user[LANG] == LANGS[0]:
            edit_message_text = "Geolokatsiyangizni yuboring"
            button_text = "Geolokatsiyamni jo'natish"
            reply_text = "Yoki bu bosqichni o'tkazib yuborish uchun \U000027A1 ni bosing"

        if user[LANG] == LANGS[1]:
            edit_message_text = 'Отправьте свою геолокацию'
            button_text = 'Отправить мою геолокацию'
            reply_text = 'Или нажмите \U000027A1, чтобы пропустить этот шаг'

        if user[LANG] == LANGS[2]:
            edit_message_text = "Геолокациянгизни юборинг"
            button_text = "Геолокациямни жўнатиш"
            reply_text = "Ёки бу босқични ўтказиб юбориш учун \U000027A1 ни босинг"

        edit_message_text = f'{edit_message_text} :'
        button_text = '\U0001F4CD ' + button_text

        reply_keyboard = ReplyKeyboardMarkup(
            [[KeyboardButton(button_text, request_location=True)],
             [KeyboardButton('\U000027A1')]],
            resize_keyboard=True)

        callback_query.edit_message_text(edit_message_text)
        callback_query.message.reply_text(reply_text,
                                          reply_markup=reply_keyboard)

        state = FROM_LOCATION

    callback_query.answer()
    user_data[USER_INPUT_DATA][STATE] = state

    return state
def message_handler_callback(update: Update, context: CallbackContext):
    # with open('jsons/update.json', 'w') as update_file:
    #     update_file.write(update.to_json())
    user_data = context.user_data
    set_user_data(update.effective_user.id, user_data)
    user = user_data['user_data']

    full_text = update.message.text
    text = full_text.split(' ', 1)[-1]

    if user:

        if user[IS_ADMIN]:

            # Yangi buyurtmalar
            if text == reply_keyboard_types[admin_menu_keyboard][
                    user[LANG]][1]:
                waiting_orders = get_orders_by_status(status='waiting')

                if waiting_orders:

                    for order in waiting_orders:
                        order_itmes = get_order_items(order[ID])
                        client = get_user(order[USER_ID])
                        geo = json.loads(
                            order[GEOLOCATION]) if order[GEOLOCATION] else None

                        new_dict = dict()
                        label = '[Yangi buyurtma]'

                        for item in order_itmes:
                            new_dict.update(
                                {item['book_id']: item['quantity']})

                        text_for_admin = f'\U0001F194 {order[ID]} '

                        if order['with_action']:
                            text_for_admin += get_action_layout(new_dict,
                                                                data=label)
                            label += "[🔥MEGA AKSIYA(5 + 1)🔥]"
                        else:
                            text_for_admin += get_basket_layout(new_dict,
                                                                user[LANG],
                                                                data=label)

                        text_for_admin += f'\nMijoz: {wrap_tags(client[FULLNAME])}\n' \
                                          f'Tel: {wrap_tags(order[PHONE_NUMBER])}\n'
                        # f'Manzil: {wrap_tags(order[ADDRESS])}\n'

                        text_for_admin += f'Telegram: {wrap_tags("@" + client[USERNAME])}\n' \
                            if client[USERNAME] else '\n'
                        text_for_admin += f'Status: {wrap_tags("qabul qilish kutilmoqda")}'

                        inline_keyboard = InlineKeyboard(
                            orders_keyboard, user[LANG],
                            data=[geo, order[ID]]).get_keyboard()

                        update.message.reply_html(text_for_admin,
                                                  reply_markup=inline_keyboard)

                else:
                    update.message.reply_text(
                        'Yangi buyurtmalar mavjud emas !')

            # Qabul qilingan buyutmalar or Tarix
            if text == reply_keyboard_types[admin_menu_keyboard][user[LANG]][2] or \
                    (text == reply_keyboard_types[admin_menu_keyboard][user[LANG]][3]):

                if text == reply_keyboard_types[admin_menu_keyboard][
                        user[LANG]][3]:
                    orders = get_orders_by_status(('delivered', 'canceled'))
                    empty_text = "Tarix  bo'sh !"
                    label = '[Tarix]'
                else:
                    orders = get_orders_by_status('received')
                    empty_text = 'Qabul qilingan buyurtmalar mavjud emas !'
                    label = ''

                if orders:
                    wanted = 1
                    order = orders[wanted - 1]
                    status = 'yetkazilgan' if order[STATUS] == 'delivered' else 'rad etilgan' \
                        if order[STATUS] == 'canceled' else 'qabul qilingan'
                    client = get_user(order[USER_ID])
                    order_itmes = get_order_items(order[ID])
                    new_dict = dict()
                    books_ids = []
                    books_text = ''
                    if order['with_action']:
                        label += "[🔥MEGA AKSIYA(5 + 1)🔥]"

                    for item in order_itmes:
                        new_dict.update({item['book_id']: item['quantity']})
                        books_ids += [str(item['book_id'])]

                    books = get_books(books_ids)
                    for book in books:
                        books_text += f'Kitob nomi: {wrap_tags(book[TITLE])}\n' \
                                      f'Soni: {wrap_tags(str(new_dict[book[ID]]) + " ta")}' \
                                      f'\n{wrap_tags("".ljust(22, "-"))}\n\n'

                    inline_keyboard = InlineKeyboard(
                        paginate_keyboard,
                        user[LANG],
                        data=[wanted, orders],
                        history=label).get_keyboard()

                    if order[GEOLOCATION]:
                        geo = json.loads(order[GEOLOCATION])
                        inline_keyboard = inline_keyboard.inline_keyboard
                        keyboard = InlineKeyboard(
                            geo_keyboard,
                            data=geo).get_keyboard().inline_keyboard
                        inline_keyboard += keyboard
                        inline_keyboard = InlineKeyboardMarkup(inline_keyboard)

                    text = [
                        f'\U0001F194 {order[ID]} {label}\n',
                        f'Status: {wrap_tags(status)}',
                        f'Yaratilgan vaqti: {wrap_tags(order["created_at"].strftime("%d-%m-%Y %X"))}\n',
                        f'Ism: {wrap_tags(client[FULLNAME])}',
                        f'Tel: {wrap_tags(order[PHONE_NUMBER])}',
                        f'Telegram: {wrap_tags("@" + client[USERNAME])}'
                        if client[USERNAME] else ''
                        # f'Manzil: {order["address"]}',
                    ]
                    text = '\n'.join(text)
                    text += f'\n\n{books_text}'

                    update.message.reply_html(text,
                                              reply_markup=inline_keyboard)

                else:

                    update.message.reply_text(empty_text)

        else:

            # Buyrutmalarim
            if text == reply_keyboard_types[client_menu_keyboard][
                    user[LANG]][2]:
                user_orders = get_user_orders(user[ID])

                if user_orders:
                    wanted = 1
                    order = user_orders[wanted - 1]
                    order_itmes = get_order_items(order[ID])
                    new_dict = dict()
                    books_ids = []
                    books_text = ''
                    label = ''
                    if order['with_action']:
                        label += "[🔥MEGA AKSIYA(5 + 1)🔥]"

                    for item in order_itmes:
                        new_dict.update({item['book_id']: item['quantity']})
                        books_ids += [str(item['book_id'])]

                    books = get_books(books_ids)
                    for book in books:
                        books_text += f'Kitob nomi: {wrap_tags(book[TITLE])}\n' \
                                      f'Soni: {wrap_tags(str(new_dict[book[ID]]) + " ta")}' \
                                      f'\n{wrap_tags("".ljust(22, "-"))}\n\n'

                    status = 'qabul qilingan' if order[STATUS] == 'received' else 'rad etilgan' \
                        if order[STATUS] == 'canceled' else 'qabul qilish kutilmoqda' \
                        if order[STATUS] == 'waiting' else 'yetkazilgan'

                    text = [
                        f'\U0001F194 {order[ID]} {label}\n',
                        f'Status: {wrap_tags(status)}',
                        f'Yaratilgan vaqti: {wrap_tags(order["created_at"].strftime("%d-%m-%Y %X"))}'
                    ]
                    text = '\n'.join(text)
                    text += f'\n\n{books_text}'

                    inline_keyboard = InlineKeyboard(
                        paginate_keyboard,
                        user[LANG],
                        data=[wanted, user_orders]).get_keyboard()

                    if order[STATUS] == 'received':
                        deliv_keyb = InlineKeyboard(
                            delivery_keyboard, user[LANG],
                            data=order[ID]).get_keyboard()
                        pag_keyb = inline_keyboard.inline_keyboard
                        deliv_keyb = deliv_keyb.inline_keyboard
                        inline_keyboard = InlineKeyboardMarkup(pag_keyb +
                                                               deliv_keyb)

                    update.message.reply_html(text,
                                              reply_markup=inline_keyboard)

                else:
                    update.message.reply_text(
                        'Sizda hali buyurtmalar mavjud emas !')

            # Biz bilan bo'glanish
            elif text == reply_keyboard_types[client_menu_keyboard][
                    user[LANG]][3]:

                text = f"Kitapp premium adminlari bilan boglanish uchun:\n" \
                       f"{wrap_tags('@kitapp_admin', '[ +998999131099 ]')} yoki\n\n" \
                       f"{wrap_tags('@alisherqultayev', '[ +998903261609 ]')} larga murojaat qilishingiz mumkin."

                update.message.reply_html(text)

            else:
                thinking_emoji = '\U0001F914'
                update.message.reply_text(thinking_emoji, quote=True)

    else:

        reply_text = "\U000026A0 Siz ro'yxatdan o'tmagansiz !\nBuning uchun /start ni bosing."
        # "\U000026A0 Вы не зарегистрированы !\nДля этого нажмите /start\n\n" \
        # "\U000026A0 Сиз рўйхатдан ўтмагансиз !\nБунинг учун /start ни босинг"

        update.message.reply_text(reply_text)
Example #30
0
def date_callback(update: Update, context: CallbackContext):
    callback_query = update.callback_query
    data = callback_query.data

    user_data = context.user_data
    user = user_data['user_data']

    if data == 'now':

        user_data[USER_INPUT_DATA][DATE] = datetime.datetime.now().strftime(
            '%d-%m-%Y')
        user_data[USER_INPUT_DATA][TIME] = 'now'

        phone_number_layout = get_phone_number_layout(user[LANG])

        if user[LANG] == LANGS[0]:
            edit_text = "Siz bilan bog'lanish uchun raqamingizni yuboring"

        if user[LANG] == LANGS[1]:
            edit_text = "Отправьте свой номер для связи с вами"

        if user[LANG] == LANGS[2]:
            edit_text = "Сиз билан боғланиш учун рақамингизни юборинг"

        reply_text = phone_number_layout

        callback_query.edit_message_text(edit_text)
        logger.info('user_input_data: %s', user_data[USER_INPUT_DATA])

        reply_keyboard = ReplyKeyboard(phone_number_keyboard,
                                       user[LANG]).get_keyboard()
        callback_query.message.reply_html(reply_text,
                                          reply_markup=reply_keyboard)

        state = USER_PHONE_NUMBER

    if data == 'today' or data == 'tomorrow' or data == 'after_tomorrow':

        if data == 'today':
            user_data[USER_INPUT_DATA][DATE] = datetime.datetime.now(
            ).strftime('%d-%m-%Y')

        if data == 'tomorrow':
            tomorrow = datetime.datetime.now() + datetime.timedelta(days=1)
            user_data[USER_INPUT_DATA][DATE] = tomorrow.strftime('%d-%m-%Y')

        if data == 'after_tomorrow':
            after_tomorrow = datetime.datetime.now() + datetime.timedelta(
                days=2)
            user_data[USER_INPUT_DATA][DATE] = after_tomorrow.strftime(
                '%d-%m-%Y')

        if user[LANG] == LANGS[0]:
            edit_text = "Soatni belgilang"

        if user[LANG] == LANGS[1]:
            edit_text = "Выберите время"

        if user[LANG] == LANGS[2]:
            edit_text = "Соатни белгиланг"

        edit_text = f'{edit_text} :'

        inline_keyboard = InlineKeyboard(hours_keyboard,
                                         user[LANG],
                                         begin=6,
                                         end=17).get_keyboard()
        callback_query.edit_message_text(edit_text,
                                         reply_markup=inline_keyboard)

        state = TIME

    callback_query.answer()

    user_data[USER_INPUT_DATA][STATE] = state

    return state