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 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 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
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 txt_callback(update: Update, context: CallbackContext): text = update.message.text user_data = context.user_data user = user_data['user_data'] logger.info('user_input_data: %s', user_data[USER_INPUT_DATA]) if text == '/cancel': if user[LANG] == LANGS[0]: cancel_text = "E'lon bekor qilindi" if user[LANG] == LANGS[1]: cancel_text = "Объявление отменено" if user[LANG] == LANGS[2]: cancel_text = "Эълон бекор қилинди" cancel_text = f'\U0000274C {cancel_text} !' reply_keyboard = ReplyKeyboard(menu_keyboard, user[LANG]).get_keyboard() update.message.reply_text(cancel_text, reply_markup=reply_keyboard) context.bot.edit_message_reply_markup( update.effective_chat.id, user_data[USER_INPUT_DATA].pop(MESSAGE_ID)) del user_data[USER_INPUT_DATA] return ConversationHandler.END else: if user[LANG] == LANGS[0]: warning_text = "Sizda tugallanmagan e'lon mavjud !\n\n" \ "E'lonni bekor qilish uchun /cancel ni yuboring" if user[LANG] == LANGS[1]: warning_text = "У вас есть незаконченное объявление !\n\n" \ "Отправите /cancel , чтобы отменить объявление" if user[LANG] == LANGS[2]: warning_text = "Сизда тугалланмаган эълон мавжуд!\n\n" \ "Эълонни бекор қилиш учун /cancel ни юборинг" if user_data[USER_INPUT_DATA][STATE] == CONFIRMATION: if user[LANG] == LANGS[0]: confirm = wrap_tags("«Tasdiqlash»") warning_text = "Sizda tasdiqlanmagan e'lon bor !\n\n" \ f"Tasdiqlash uchun {confirm} tugmasini bosing\n\n" \ "E'lonni bekor qilish uchun /cancel ni yuboring" if user[LANG] == LANGS[1]: confirm = wrap_tags("«Подтвердить»") warning_text = "У вас есть неподтвержденное объявление !\n\n" \ f"Нажмите кнопку {confirm}, чтобы подтвердить\n\n" \ "Отправите /cancel , чтобы отменить объявление" if user[LANG] == LANGS[2]: confirm = wrap_tags("«Тасдиқлаш»") warning_text = "Сизда тасдиқланмаган эълон бор !\n\n" \ f"Тасдиқлаш учун {confirm} тугмасини босинг\n\n" \ "Эълонни бекор қилиш учун /cancel ни юборинг" warning_text = '\U000026A0 ' + warning_text update.message.reply_html(warning_text, quote=True) return user_data[USER_INPUT_DATA][STATE]
def fullname_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 fullname = fullname_filter(update.message.text) if fullname: user_data[USER_INPUT_DATA][FULLNAME] = fullname insert_data(user_data[USER_INPUT_DATA], 'users') set_user_data(update.effective_user.id, user_data) if user_data[USER_INPUT_DATA][LANG] == LANGS[0]: text = "Tabriklaymiz !\n" \ "Siz ro'yxatdan muvofaqqiyatli o'tdingiz\n\n" # if user_data[USER_INPUT_DATA][LANG] == LANGS[1]: # text = "Поздравляем !\n" \ # "Вы успешно зарегистрировались\n\n" # # if user_data[USER_INPUT_DATA][LANG] == LANGS[2]: # text = "Табриклаймиз !\n" \ # "Сиз рўйхатдан мувофаққиятли ўтдингиз\n\n" if user_data[USER_INPUT_DATA][IS_ADMIN]: text += "Buyurtmalarni qabul qilishingiz mumkin" menu_keyboard = admin_menu_keyboard else: text += "Kitob buyurtma qilishingiz mumkin" menu_keyboard = client_menu_keyboard text = f'\U0001F44F\U0001F44F\U0001F44F {text}' reply_keyboard = ReplyKeyboard( menu_keyboard, user_data[USER_INPUT_DATA][LANG]).get_keyboard() update.message.reply_text(text, reply_markup=reply_keyboard) del user_data[USER_INPUT_DATA] state = ConversationHandler.END else: if user_data[USER_INPUT_DATA][LANG] == LANGS[0]: text = "Ism va familya xato yuborildi !\n" \ "Qaytadan quyidagi formatda yuboring" example = "Misol: Sherzodbek Esanov yoki Sherzodbek" # if user_data[USER_INPUT_DATA][LANG] == LANGS[1]: # text = 'Имя и фамилия введено неверное !\n' \ # 'Отправьте еще раз в следующем формате' # example = 'Пример: Шерзод Эсанов' # # if user_data[USER_INPUT_DATA][LANG] == LANGS[2]: # text = "Исм ва фамиля хато юборилди !\n" \ # "Қайтадан қуйидаги форматда юборинг" # example = "Мисол: Шерзод Эсанов" text = f'\U000026A0 {text}:\n\n {wrap_tags(example)}' update.message.reply_html(text, quote=True) state = FULLNAME # logger.info('user_data: %s', user_data) return state
def do_command(update: Update, context: CallbackContext): # with open('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'] command = update.message.text if command == '/start' or command == '/menu': if user: if user[LANG] == LANGS[0]: text = "Siz ro'yxatdan o'tgansiz" # if user[LANG] == LANGS[1]: # text = "Вы зарегистрированы" # # if user[LANG] == LANGS[2]: # text = "Сиз рўйхатдан ўтгансиз" text = f'\U000026A0 {text} !' if command == '/menu': if user[LANG] == LANGS[0]: reply_text = "Menyu" # if user[LANG] == LANGS[1]: # reply_text = "Меню" # # if user[LANG] == LANGS[2]: # reply_text = "Меню" text = f'\U0001F4D6 {reply_text}' menu_keyboard = admin_menu_keyboard if user_data['user_data'][ IS_ADMIN] else client_menu_keyboard reply_keyboard = ReplyKeyboard(menu_keyboard, user[LANG]).get_keyboard() update.message.reply_text(text, reply_markup=reply_keyboard) state = ConversationHandler.END else: user_data[USER_INPUT_DATA] = dict() user_data[USER_INPUT_DATA][TG_ID] = update.effective_user.id user_data[USER_INPUT_DATA][ USERNAME] = update.effective_user.username user_data[USER_INPUT_DATA][ IS_ADMIN] = update.effective_user.id in ACTIVE_ADMINS user_data[USER_INPUT_DATA][LANG] = 'uz' text = 'Ism va familyangizni yuboring:' update.message.reply_text(text) state = FULLNAME # logger.info('user_data: %s', user_data) 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 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 do_command(update: Update, context: CallbackContext): # with open('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'] command = update.message.text if command == '/start' or command == '/menu': if user: if user[LANG] == LANGS[0]: text = "Siz ro'yxatdan o'tgansiz" if user[LANG] == LANGS[1]: text = "Вы зарегистрированы" if user[LANG] == LANGS[2]: text = "Сиз рўйхатдан ўтгансиз" text = f'\U000026A0 {text} !' if command == '/menu': if user[LANG] == LANGS[0]: reply_text = "Menyu" if user[LANG] == LANGS[1]: reply_text = "Меню" if user[LANG] == LANGS[2]: reply_text = "Меню" text = f'\U0001F4D6 {reply_text}' reply_keyboard = ReplyKeyboard(menu_keyboard, user[LANG]).get_keyboard() update.message.reply_text(text, reply_markup=reply_keyboard) state = ConversationHandler.END else: user_data[USER_INPUT_DATA] = dict() user_data[USER_INPUT_DATA][TG_ID] = update.effective_user.id user_data[USER_INPUT_DATA][ USERNAME] = update.effective_user.username inline_keyboard = InlineKeyboard(langs_keyboard).get_keyboard() message = update.message.reply_text( 'Tilni tanlang\n' 'Выберите язык\n' 'Тилни танланг', reply_markup=inline_keyboard) user_data[USER_INPUT_DATA][MESSAGE_ID] = message.message_id state = LANG logger.info('user_data: %s', user_data) return state
def fullname_callback(update: Update, context: CallbackContext): # with open('../update.json', 'w') as update_file: # update_file.write(update.to_json()) user_data = context.user_data text = update.message.text fullname = fullname_filter(text) if fullname: user_data[USER_INPUT_DATA][NAME] = fullname[0] user_data[USER_INPUT_DATA][SURNAME] = fullname[1] insert_user(user_data[USER_INPUT_DATA]) set_user_data(update.effective_user.id, user_data) if user_data[USER_INPUT_DATA][LANG] == LANGS[0]: text = "Tabriklaymiz !\n" \ "Siz ro'yxatdan muvofaqqiyatli o'tdingiz\n\n" \ "E'lon berishingiz mumkin" if user_data[USER_INPUT_DATA][LANG] == LANGS[1]: text = "Поздравляем !\n" \ "Вы успешно зарегистрировались\n\n" \ "Вы можете помешать объявление" if user_data[USER_INPUT_DATA][LANG] == LANGS[2]: text = "Табриклаймиз !\n" \ "Сиз рўйхатдан мувофаққиятли ўтдингиз\n\n" \ "Эълон беришингиз мумкин" text = '\U0001F44F\U0001F44F\U0001F44F ' + text reply_keyboard = ReplyKeyboard( menu_keyboard, user_data[USER_INPUT_DATA][LANG]).get_keyboard() update.message.reply_text(text, reply_markup=reply_keyboard) del user_data[USER_INPUT_DATA] state = ConversationHandler.END else: if user_data[USER_INPUT_DATA][LANG] == LANGS[0]: text = "Ism va familya xato yuborildi !\n" \ "Qaytadan quyidagi formatda yuboring" example = "Misol: Sherzod Esanov" if user_data[USER_INPUT_DATA][LANG] == LANGS[1]: text = 'Имя и фамилия введено неверное !\n' \ 'Отправьте еще раз в следующем формате' example = 'Пример: Шерзод Эсанов' if user_data[USER_INPUT_DATA][LANG] == LANGS[2]: text = "Исм ва фамиля хато юборилди !\n" \ "Қайтадан қуйидаги форматда юборинг" example = "Мисол: Шерзод Эсанов" text = f'\U000026A0 {text}:\n\n {wrap_tags(example)}' update.message.reply_html(text, quote=True) state = FULLNAME logger.info('user_data: %s', user_data) return state