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
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
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
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
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
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)
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('&', '&').replace('<', '<').replace('>', '>') 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
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
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
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
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
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
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
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]
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
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)
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